Spring框架整合Struts2步骤
-----------------------------------------------
Spring如何与Struts2整合
第一步:
1.将Action纳入到Spring容器中
可以采用扫描注解方式也可以采用XML的<bean>定义。
第二步:
2.Action使用Service或DAO组件时,采用注入方式,将Service和DAO给Action注入
第三步:
3.引入一个struts2-spring-plugin-2.1.8.jar开发包(已经引入Spring开发包和Struts2开发包)
( 当发生action请求时,
StrutsFilter控制器会通过该开发包去Spring容器寻找Action对象,
进行请求处理 )
===struts2-spring-plugin-2.1.8.jar原理=====
该组件提供了一个StrutsSpringObjectFactory,
当引入该jar包后,
会利用StrutsSpringObjectFactory替代原Struts框架中的ObjectFactory负责生成Action对象。
StrutsSpringObjectFactory可以访问Spring容器。
该Factory会按struts.xml中<action>配置的class属性值作为原则寻找Spring容器中的Bean对象。
//a.利用class属性当做Bean组件的id值去Spring容器寻找
第四步:
4-1)修改struts.xml中所有<action>的class属性值,修改成容器中对应Action组件的id值
//b.利用class属性采用反射机制创建普通的action,之后将Spring容器Bean对象给action注入。
4-2)不需要修改原有的struts.xml配置,(推荐使用这种配置)
需要修改Action组件代码,添加setter方法,
以setter方式接收注入的DAO或Service.或者属性注入也可以
例如要注入容器中的costDAO,
就需要在Action中追加setCostDAO(){}
第五步:
5.在web.xml中定义ContextLoaderListener,用于在服务器启动时,实例化Spring容器。
-----------------------------------
web.xml中的配置例子:
-----------------------------------
<filter>
<filter-name>struts2filter</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/*/
<!-- 指定要加载的Spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 用于实例化Spring容器
默认加载 /WEB-INF/applicationContext.xml
-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
------------------------------------------------------------------