天天看点

Struts+Spring整合方式

struts与spring整合方式有三种:

方式一:通过Spring的ActionSupport类实现。

方式二:通过Sping的DelegatingRequestProcessor类覆盖struts的requestprocessor实现。

方式三:通过Sping的DelegatingActionProxy类实现,将struts action管理委托给spring框架。

相同点:以上三种方式都需要在struts的配置文件struts-config.xml中注册spring的ContextLoaderPlugIn插件。即:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>

</plug-in>

不同点:

方式一:使用Spring提供的ActionSupport类,只需要使用Action继承Spring的ActionSupport类,即可实现Spring与struts的整合,使用起来简单方便,但是struts的Action与Spring耦合在一起,并且Struts的Action不在spring的控制之中,这样如果更换别的IOC容器,或想使用Spring的AOP都是比较困难的,而且如果是多个动作放在一个Action中,则这种方式就无能为了了!

方式二:使用Spring的DelegatingRequestProcessor类,需要在Struts的配置文件中,使用DelegatingRequestProcessor代替Struts的RequestProcessor类,并在Spring的配置文件中动作映射对应的Bean,可以很方便的转换而不用修改代码,这种方式的缺点是依赖于Struts的RequestProcessor类。

方式三:使用Spring的DelegatingActionProxy类,需要在Struts的配置文件中,定义动作映射的type属性为DelegatingActionProxy而不是类的实际名称,并在Spring的配置文件中定义和Struts配置文件动作映射对应的Bean,这种方式和Struts耦合性最小。

注:三者中,使用Spring的DelegatingActionProxy类来整合Spring和Struts的方式最为强大和灵活。

方式三的实例

login.jsp

代码  

<%@ page language="java" pageEncoding="ISO-8859-1"%>  

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>   

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  

<html>   

    <head>  

        <title>JSP for LoginForm form</title>  

    </head>  

    <body>  

        <html:form action="/login">  

            username : <html:text property="username"/><html:errors property="username"/><br/>  

            password : <html:password property="password"/><html:errors property="password"/><br/>  

            <html:submit/><html:cancel/>  

        </html:form>  

    </body>  

</html> 

/StrutsLoginDemo/WebRoot/WEB-INF/struts-config.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> 

<struts-config> 

  <data-sources /> 

  <form-beans > 

    <form-bean name="loginForm" type="com.qdu.sun.struts.form.LoginForm" /> 

  </form-beans> 

  <global-exceptions /> 

  <global-forwards /> 

  <action-mappings > 

    <action 

      attribute="loginForm" 

      input="/login.jsp" 

      name="loginForm" 

      path="/login" 

      scope="request" 

      type="org.springframework.web.struts.DelegatingActionProxy"> 

      <forward name="failed" path="/fail.jsp" /> 

      <forward name="success" path="/success.jsp" /> 

    </action> 

  </action-mappings> 

  <message-resources parameter="com.qdu.sun.struts.ApplicationResources" /> 

  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> 

    <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/> 

 </plug-in> 

</struts-config> 

/StrutsLoginDemo/WebRoot/WEB-INF/applicationContext.xml

<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-2.0.xsd"> 

<bean id="login" class="com.qdu.sun.struts.BO.LoginBO"/> 

  <bean name="/login"   

    class="com.qdu.sun.struts.action.LoginAction">     

     <property name="loginBean"> 

        <ref bean="login"/> 

     </property> 

  </bean> 

</beans> 

/StrutsLoginDemo/src/com/qdu/sun/struts/action/LoginAction.java

/*  

 * Generated by MyEclipse Struts  

 * Template path: templates/java/JavaClass.vtl  

 */  

package com.qdu.sun.struts.action;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

import org.apache.struts.action.Action;  

import org.apache.struts.action.ActionForm;  

import org.apache.struts.action.ActionForward;  

import org.apache.struts.action.ActionMapping;  

import com.qdu.sun.struts.BO.LoginBO;  

import com.qdu.sun.struts.form.LoginForm;  

/**   

 * MyEclipse Struts  

 * Creation date: 08-05-2008  

 *   

 * XDoclet definition:  

 * @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true" 

 * @struts.action-forward name="failed" path="/fail.jsp" 

 * @struts.action-forward name="success" path="/success.jsp" 

public class LoginAction extends Action {  

    /*  

     * Generated Methods  

     */  

    /**   

     * Method execute  

     * @param mapping  

     * @param form  

     * @param request  

     * @param response  

     * @return ActionForward  

    private LoginBO loginBean;   

    public LoginBO getLoginBean() {  

        return loginBean;  

      }  

      public void setLoginBean(LoginBO loginBean) {     

        this.loginBean=loginBean;  

      }   

    public ActionForward execute(ActionMapping mapping, ActionForm form,  

            HttpServletRequest request, HttpServletResponse response) {  

        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub  

        LoginBO login=getLoginBean();    

        if(login.validate(loginForm.getUsername(), loginForm.getPassword()))  

        {  

            request.setAttribute("username", loginForm.getUsername());  

        return mapping.findForward("success");  

        }  

        else  

            return mapping.findForward("failed");  

    }  

本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080803