Spring整合Struts2需要导入struts2-spring-plugin.jar文件。
导入完成之后,struts2的所有类文件的初始化都交由spring容器管理。
例如:
在不使用spring之前,我们是这样配置struts2.xml文件的。
struts.xml
...
<package name="package" extends="struts-default">
<action name="testAction" class="com.sun.TestAction">
<result name="success">index.jsp</result>
</action>
</package>
此时com.sun.TestAction类是由Struts2帮我们创建的。当我们使用Spring之后,需要将Action类的初始化工作转交给Spring,因此我们需要配置applicationContext.xml声明这些action对象。
applicationContext.xml
...
<bean id="testAction" class="com.sun.TestAction" scope="prototype"/>
struts.xml
...
<package name="package" extends="struts-default">
<action name="testAction" class="testAction">
<result name="success">index.jsp</result>
</action>
</package>
当我们配置完spring.xml文件启动项目时,spring会自动将com.sun.TestAction放到容器中管理,注意此时action类的scope属性为prototype,因为struts2的每一次请求都会新建一个action进行处理。此时我们的struts.xml文件中对应class属性应该改为spring为我们配置好的,已经在容器中存在的testAction对象,不需要再由struts自己创建对象。
web.xml
...
<!--spring配置文件路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--struts过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
网友评论