一、简介:
1、来由:
Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的。
2、解释:
Struts2框架是一个轻量级的MVC流程框架,轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分层开发,控制数据的流程,从哪里来,到那里去,怎么来,怎么去的这样一个框架;
二、配置过程
1、引入Struts2 jar包:
2、编写配置文件:
*Web.xml---配置核心过滤器
代码:
<!-- 配置Struts2的核心过滤器 --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
*Struts.xml
在src文件夹下建立struts.xml文件:
代码:
<?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache SoftwareFoundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constantname="struts.devMode" value="false" /> </struts>
三、Spring整合Struts2
Spring也提供了MVC模式的支持,但Struts是比较单纯的MVC框架,开发中更倾向Spring和Struts整合开发。Struts和Spring的整合比较简单顺畅。
整合关键点是:将Struts中的Action的实例生成不再由Struts负责,而交给Spring容器管理,主要目的是让控制器与业务逻辑组件实现分离。基于该目的,我们采用工厂模式策略,让Spring容器管理Action,利用IoC的依赖注入特性为控制器注入业务逻辑组件。Struts只单纯扮演控制器的角色。
下面是Spring和Struts整合的关键步骤。Struts的核心控制器必须能装载Spring的应用程序环境。
Spring和Struts整合有两种方式
1、Struts2的Action由Struts2框架自身创建.
2、Struts2的Action交给Spring框架创建.
我们推荐使用第二种方式,因为第二种方式,Action类由Spring容器进行管理,可以方便的对Action类进行AOP的编程。但第二种有一个关键地方:就是在Struts2框架创建Action类的时候,默认是多例的。而Spring容器在管理类的时候,默认创建是单例的.单例的这种方式就容易产生线程安全问题.所以一定要配置类的scope属性。
关于scope的了解:http://blog.csdn.net/camper001/article/details/6121910
*********************** 以后台商品管理为例***************************
在Spring的配置文件中配置:
<!--商品模块的Action --> <bean id="adminProductAction" class="cn.itcast.shop.product.adminaction.AdminProductAction"scope="prototype"></bean>
在Struts的配置文件中配置:
1. <actionname="adminProduct_*" class="adminProductAction"method="{1}"> 2. </action>
比如,添加商品,
1.在前台商品页面,请求添加商品,请求访问addPage方法:
window.location.href= "${pageContext.request.contextPath}/adminProduct_addPage.action";
2.跳转到Struts中对应类的名称为“adminProduct”中,在applicationContxt(Spring的配置)中adminProductAction对应的是此地址下类:"cn.itcast.shop.product.adminaction.AdminProductAction" ,于是在此action中查找添加商品需要的方法addPage;
public String addPage(){ //查询所有的二级分类的集合: List<CategorySecond>csList=categorySecondService.findAll(); //通过值栈来保存数据 ActionContext.getContext().getValueStack().set("csList",csList); //页面跳转 return"addPageSuccess"; }
在此方法中要求返回addPageSuccess,我们在Struts中规定,返回addPageSuccess时,跳转到add.jsp:
<resultname="addPageSuccess">/admin/product/add.jsp</result>
此时,在ssh框架中,Struts实现了控制器,控制跳转,但并不负责实例的生成。
以上是我对Struts的理解和框架的搭建,请路过的大鸟批评指点。