spring与struts2的整合

工程文件结构图:

1,创建名为loginSpringStruts2的web工程,具体机构如上图,在该工程的/WebRoot/WEB-INF/lib路径下添加struts2常用的JAR包(参见“struts2配置”),同时添加名为spring.jar,  commons-loggin.jar(已经添加),cglib-nodep-2.1_3.jar(AOP用到),struts2-spring-plugin-2.0.11.jar等4个Spring运行库文件。

2,创建前台视图login.jsp  success.jsp  error.jsp,  具体参见(“struts2配置”

3,在src下创建applicationContext.xml,配置如下:

View Code
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    
    <!-- 配置Struts2里的Action对象 -->
    <bean id="login" class="action.LoginAction"></bean>
</beans>

4,在src下创建struts.properties消息文件,添加“struts.objectFactory=spring"语句,使得Struts2类的生成交给spring完成,具体代码:

View Code
struts.objectFactory=spring
struts.action.extension=action
struts.locale=en_GB

5,在src下创建struts.xml, 具体配置如下:

View Code
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC 
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    

<package name="main" extends="struts-default">
    <action name="login" class="action.LoginAction">
        <result name="error">/error.jsp</result>
        <result name="success">/success.jsp</result>
    </action>
</package>

</struts>

  相应的action.LoginAction代码如下:

View Code
package action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private String userName;
    private String userPsw;
    

    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }


    public String getUserPsw() {
        return userPsw;
    }


    public void setUserPsw(String userPsw) {
        this.userPsw = userPsw;
    }


    /**
     * @return
     */
    public String execute() {
        if(getUserName().equals("123")&& getUserPsw().equals("123")){
            return SUCCESS;
        }

        
        else return ERROR;
    }
}

  相应的filter.CharacterEncodingFilter.java的代码如下:

View Code
package filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {
    private String characterEncoding;//编码方式在web.xml中
    private boolean enabled;//是否启动filter,初始值在web.xml中
    
    @Override
    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
        //初始化时加载参数
        //从配置文件中读取设置到编码方式
        characterEncoding=config.getInitParameter("characterEncoding");
        //启动该过滤器完成编码方式到修改
        enabled="true".equalsIgnoreCase(characterEncoding.trim())
            ||"1".equalsIgnoreCase(characterEncoding.trim());
        
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        if(enabled||characterEncoding!=null){
            request.setCharacterEncoding(characterEncoding);//设置request编码方式
            response.setCharacterEncoding(characterEncoding);//设置response编码方式
        }
        chain.doFilter(request, response);//doFilter将修改好的request和response参数向下传递;
        
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        characterEncoding=null;
        
    }

    



}

6,配置web.xml,包括struts2监听,字符集过滤,spring的web监听,并通过<context-param>标签来配置applicationContext.xml文件的位置

View Code
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    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_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- struts2过滤器 -->
    <filter>
      <filter-name>struts</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
      <init-param>
          <param-name>struts.action.extension</param-name>
          <param-value>action</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>struts</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 字符集过滤器 -->
  <filter>
      <filter-name>characterEncodingFilter</filter-name>
      <filter-class>filter.CharacterEncodingFilter</filter-class>
      <init-param>
          <param-name>characterEncoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
          <param-name>enable</param-name>
          <param-value>true</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- spring的监听 -->
  <listener>
      <listener-class>
          org.springframework.web.context.ContextLoaderListener
      </listener-class>
  </listener>
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value> 
  </context-param>
  
  
</web-app>
posted @ 2012-11-28 11:01  lpshou  阅读(352)  评论(0编辑  收藏  举报