首页 > 代码库 > Spring整合Struts2
Spring整合Struts2
- Spring整合Struts2的核心思想:Struts2的Action实例交给Spring的IOC容器装配管理。
- 整合步骤:
1. 导入开发包:
除了Struts2和Spring开发所必须的jar以外,还要导入以下三个jar,即:
2. 编写测试代码
(1). 配置web.xml文件
Spring整合Struts2时,依然需要加载Spring的配置文件applicationContext.xml文件,从而是IOC容器能够管理应用中所需的bean,所以需要在web.xml文件中配置一个listener来完成加载Spring配置文件的功能。同时也要指定类路径下的Spring配置文件。
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <filter> <filter-name>FilterDispatcher</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>FilterDispatcher</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></web-app>
(2). 编写Struts2的Action类
package action;import service.LoginService;import bean.User;import com.opensymphony.xwork2.ModelDriven;public class LoginAction implements ModelDriven<User>{ private LoginService loginService; private User user; public String execute() { boolean flag = loginService.login(user); if(flag) { return "success"; } return "fail"; } public void setLoginService(LoginService loginService) { this.loginService = loginService; } public void setUser(User user) { this.user = user; } @Override public User getModel() { return user; }}
(3). 配置Spring的配置文件applicationContext.xml
在 IOC 容器中配置 Struts2 的 Action 时, 需要配置 scope 属性, 其值必须为 prototype。在Struts2中,客户端每次发送一个action请求都会产生一个Action实例。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="loginService" class="service.LoginService"></bean> <bean id="user" class="bean.User"></bean> <bean id="loginAction" class="action.LoginAction" scope="prototype"> <property name="loginService" ref="loginService"></property> <property name="user" ref="user"></property> </bean></beans>(4). 配置struts2.xml文件
此时应该注意的是,struts.xml文件中的<action>元素的class属性将不再是该Action对应的实际类型了,而是合法的Java标示符即可,该标示符将和 applicationContext.xml 文件中的 Action 的 bean 的 id 属性值对应。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/user" extends="struts-default"> <action name="login" class="loginAction" method="execute"> <result name="success">/success.jsp</result> <result name="fail">/fail.jsp</result> </action> </package></struts>
注意:以上测试代码并不完整,请自行编写 LoginService 类中 login(User user) 的实现逻辑。
Spring整合Struts2