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) 的实现逻辑。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。