首页 > 代码库 > Spring整合Struts2

Spring整合Struts2

  • Spring整合Struts2的核心思想:Struts2的Action实例交给Spring的IOC容器装配管理。
  • 整合步骤:

            1. 导入开发包:

                 除了Struts2和Spring开发所必须的jar以外,还要导入以下三个jar,即:

                 image

          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