Struts2与Spring整合,可以使用Spring的来描述依赖关系,在Struts2的配置文件struts.xml时使用Spring创建的bean。
1.导入jar包
struts2:
struts-2.3.15.3\apps\struts2-blank.war\WEB-INF\lib\*.jar
struts-2.3.15.3\lib\struts2-json-plugin-2.3.15.3.jar
struts-2.3.15.3\lib\struts2-spring-plugin-2.3.15.3.jar
Spring:
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.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>
3.在web.xml中配置spring的监听器,用于初始化容器的对象的监听器,与其他的架构进行整合。容器启动时会自动读取applicationContext.xml文件
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
4.在applicationContext.xml配置自动装配bean的包路径
<!-- 自动装配bean -->
<context:component-scan base-package="cn.syq.oa"></context:component-scan>
5.在struts.xml中配置action,在这里因为已经和spring 进行的了整合所以不需要在配置action 的class时全路径,直接写bean的名称
<struts>
<!-- 配置开发模式,修改后直接部署 -->
<constant name="struts.devMode" value="true" />
<!-- 把扩展名配置为action -->
<constant name="struts.action.extension" value="action" />
<!-- 把主题配置为simple -->
<constant name="struts.ui.theme" value="simple"></constant>
<package name="default" namespace="/" extends="struts-default">
<!-- 没有与spring整合的action配置
<action name="test" class="cn.syq.oa.test.TestAction">-->
<!-- 与spring整合的action配置,只写bean的名称-->
<action name="test" class="testAction">
<result name="success">/test.jsp</result>
</action>
</package>
</struts>
6.写action的单元测试。需要加入spring的注解,需要注意的是Scope注解属性要用prototype。
package cn.syq.oa.test;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
@Controller
@Scope("prototype")
public class TestAction extends ActionSupport{
@Override
public String execute() throws Exception {
testService.saveUser();
return "success";
}
}
总之,struts2与spring整合以后,可以在struts中直接使用spring进行bean的配置。换句话说就是让struts2的action由容器管理。