<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小毅總結之--->spring整合struts的三種方式

    Posted on 2008-10-12 00:45 H2O 閱讀(853) 評論(1)  編輯  收藏 所屬分類: Spring+Struts+Hibernate整合 spring整合struts的三種方式" trackback:ping="http://m.tkk7.com/xiaoyi/services/trackbacks/233816.aspx" /> -->
    方式一:使用 Spring 的 ActionSupport或DispachActionSupport 類整合 Structs
    Action

    package com.yz.actions.action;

    import java.lang.reflect.InvocationTargetException;
    import javax.servlet.http.*;
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.struts.action.*;
    import org.springframework.web.struts.DispatchActionSupport;
    import com.yz.services.*;
    import com.yz.actions.form.*;
    import com.yz.vo.UserVo;
    //spring的action管理請求
    public class UserAction extends DispatchActionSupport {
        
    //針對接口編程
        IUserServices ius;
        
        
    public IUserServices getIus() {
            
    return ius;
        }


        
    public void setIus(IUserServices ius) {
            
    this.ius = ius;
        }


        
    public ActionForward test(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) 
    {
            UserForm userForm 
    = (UserForm) form;
            UserVo uv 
    = new UserVo();
            
    try {
                BeanUtils.copyProperties(uv, userForm);
            }
     catch (Exception e) {
                    e.printStackTrace();
            }

            
    /*IUserServices ius = new IUserServicesImpl();*/
            
    //通過父類的方法獲取spring容器 并得到其中的bean對象
            ius =(IUserServices)super.getWebApplicationContext().getBean("ius");
            boolean add = ius.addUsers(uv);
            System.out.println(uv.getUserName());
            String url 
    = "/error.jsp";
            
    if(add){
                url 
    = "/ok.jsp";
            }

            System.out.println(url);
            
    return new ActionForward(url) ;
        }

    }

    自己寫的請求處理器,處理中文亂碼
    package com.yz.myReq;

    import java.io.UnsupportedEncodingException;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.RequestProcessor;

    public class myReq extends RequestProcessor 

    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="userForm" type="com.yz.actions.form.UserForm" />

      
    </form-beans>

      
    <global-exceptions />
      
    <global-forwards />
      
    <action-mappings >
        
    <action
          
    attribute="userForm"
          name
    ="userForm"
          path
    ="/user"
          scope
    ="request"
          type
    ="com.yz.actions.action.UserAction" 
          parameter
    ="actions"
       
    />
      
    </action-mappings>
      
    <controller processorClass="com.yz.myReq.myReq"></controller>
      
    <message-resources parameter="com.yz.actions.ApplicationResources" />
     
    <!-- 添加一個插件,用來在啟動struts框架的時候,
          同時讀取spring配置文件,啟動spring容器 
    -->
      
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
              
    <set-property property="contextConfigLocation" 
              value
    ="/WEB-INF/applicationContext.xml"/>
     
    </plug-in>
    </struts-config>


    applicationContext.xml
    <?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:util
    ="http://www.springframework.org/schema/util"
        xmlns:p
    ="http://www.springframework.org/schema/p"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xsi:schemaLocation
    ="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
    >
        
        
    <bean id="userDaoImpl" class="com.yz.dao.impl.IuserDaoImpl"></bean>
    <!-- action里面有一個ius(service的接口引用),
        他來自  com.yz.services.impl.IUserServicesImpl(指向接口的實現類)
        IUserServicesImpl里面有一個iud(IuserDao接口引用)
        他 ref id為 userDaoImpl(指向接口的實現類)   
        
    -->
        
    <bean id="ius" class="com.yz.services.impl.IUserServicesImpl">
            
    <property name="iud">
                
    <ref bean="userDaoImpl"/>
            
    </property>
        
    </bean>
    </beans>

    <!--
    整合思路:
       1、通過從 Spring 的 ActionSupport或者DispachActionSuport 類而不是 Struts 的 Action 類進行擴展,創建了一個新的 Action,
       2、使用 getWebApplicationContext() 方法獲得一個 ApplicationContext。為了獲得spring容器上下文對象,從而查找一個 Spring bean。

    優缺點:
          1、這種技術很簡單并且易于理解。
          2、它將 Struts 動作與 Spring 框架耦合在一起。如果您想替換掉 Spring,那么您必須重寫代碼。并且,由于 Struts 動作不在 Spring 的控制之下,所以它不能獲得 Spring AOP 的優勢。當使用多重獨立的 Spring 環境時,這種技術可能有用,但是在大多數情況下,這種方法不如另外兩種方法合適。

    -->

    方式二:
    使用 Spring 的 DelegatingRequestProcessor 覆蓋 Struts 的 RequestProcessor
    Action
    /*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     
    */

    package com.yz.actions.action;

    import java.lang.reflect.InvocationTargetException;
    import javax.servlet.http.*;
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.struts.action.*;
    import org.apache.struts.actions.*;
    import org.springframework.web.struts.DispatchActionSupport;

    import com.yz.actions.form.UserForm;
    import com.yz.services.IUserServices;
    import com.yz.services.impl.IUserServicesImpl;
    import com.yz.vo.UserVo;
    //spring的action管理請求
    public class UserAction extends DispatchAction {
        
    //針對接口編程
        IUserServices ius;
        
        
    public IUserServices getIus() {
            
    return ius;
        }


        
    public void setIus(IUserServices ius) {
            
    this.ius = ius;
        }


        
    public ActionForward test(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) 
    {
            UserForm userForm 
    = (UserForm) form;
            UserVo uv 
    = new UserVo();
            
    try {
                BeanUtils.copyProperties(uv, userForm);
            }
     catch (Exception e) {
                    e.printStackTrace();
            }

         
     boolean add = ius.addUsers(uv);
            System.out.println(uv.getUserName());
            String url 
    = "/error.jsp";
            
    if(add){
                url 
    = "/ok.jsp";
            }

            System.out.println(url);
            
    return new ActionForward(url) ;
        }

    }

    繼承自spring的請求處理器替換帶哦struts的請求處理器,順便處理編碼問題。
    package com.yz.myReq;

    import java.io.UnsupportedEncodingException;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.struts.DelegatingRequestProcessor;
    //spring的請求處理器

    public class mySpringRequestProccessor extends DelegatingRequestProcessor {

        @Override
        
    protected boolean processPreprocess(HttpServletRequest req,
                HttpServletResponse resp) 
    {
            
    try {
                req.setCharacterEncoding(
    "utf-8");
            }
     catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            resp.setCharacterEncoding(
    "utf-8");
            
    return super.processPreprocess(req, resp);
        }

    }

    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="userForm" type="com.yz.actions.form.UserForm" />

      
    </form-beans>

      
    <global-exceptions />
      
    <global-forwards />
      
    <action-mappings >
        
    <action
          
    attribute="userForm"
          name
    ="userForm"
          path
    ="/user"
          scope
    ="request"
          type
    ="com.yz.actions.action.UserAction" 
          parameter
    ="actions"
       
    />
      
    </action-mappings>
      
    <!-- spring的請求處理器 自己寫的類繼承他,加了中文亂碼處理 
      這樣在actionservlet得到action的時候,就是從spring容器中去
          獲取name和path匹配的對象 
    -->
      
    <controller processorClass="com.yz.myReq.mySpringRequestProccessor"></controller>
      <message-resources parameter="com.yz.actions.ApplicationResources" />
     
    <!-- 添加一個插件,用來在啟動struts框架的時候,
          同時讀取spring配置文件,啟動spring容器 
    -->
      
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
              
    <set-property property="contextConfigLocation" 
              value
    ="/WEB-INF/applicationContext.xml"/>
     
    </plug-in>
    </struts-config>

    applicationContext.xml
    <?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:util
    ="http://www.springframework.org/schema/util"
        xmlns:p
    ="http://www.springframework.org/schema/p"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xsi:schemaLocation
    ="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
    >
        
        
    <bean id="userDaoImpl" class="com.yz.dao.impl.IuserDaoImpl"></bean>
    <!-- action里面有一個ius(service的接口引用),
        他來自  com.yz.services.impl.IUserServicesImpl(指向接口的實現類)
        IUserServicesImpl里面有一個iud(IuserDao接口引用)
        他 ref id為 userDaoImpl(指向接口的實現類)  /user 
        
    -->
        
    <bean id="intfUs" class="com.yz.services.impl.IUserServicesImpl">
            
    <property name="iud">
                
    <ref bean="userDaoImpl"/>
            
    </property>
        
    </bean>
        
        
    <!-- name必須和action的path一致 -->
        <bean name="/user" class="com.yz.actions.action.UserAction">
            <property name="ius" ref="intfUs"></property>
        
    </bean>
    </beans>

    <!--
        整合思路:
           DelegatingRequestProcessor替換struts的請求處理器,根據struts配置的action中path屬性與applicationContext.xml中配置的bean的name屬性找到相應的action。
         優缺點:
            1、這種設計使 Struts 動作并不知道它正被 Spring 管理,并且使您能夠利用 Sping 的動作管理框架的所有優點。由于您的 Struts 動作注意不到 Spring 的存在,所以您不需要重寫您的 Struts 代碼就可以使用其他控制反轉容器來替換掉 Spring。
            2、DelegatingRequestProcessor 方法的確比第一種方法好,但是仍然存在一些問題。如果您使用一個不同的 RequestProcessor,則需要手動整合 Spring 的 DelegatingRequestProcessor。添加的代碼會造成維護的麻煩并且將來會降低您的應用程序的靈活性。此外,還有過一些使用一系列命令來代替 Struts RequestProcessor 的傳聞。 這種改變將會對這種解決方法的使用壽命造成負面的影響。


    -->

    方式三:將 Struts Action 管理委托給 Spring 框架,使用代理
    Action

    package com.yz.actions.action;

    import java.lang.reflect.InvocationTargetException;
    import javax.servlet.http.*;
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.struts.action.*;
    import org.apache.struts.actions.*;
    import org.springframework.web.struts.DispatchActionSupport;

    import com.yz.actions.form.UserForm;
    import com.yz.services.IUserServices;
    import com.yz.services.impl.IUserServicesImpl;
    import com.yz.vo.UserVo;
    //spring的action管理請求
    public class UserAction extends DispatchAction {
        
    //針對接口編程
        IUserServices ius;
        
        
    public IUserServices getIus() {
            
    return ius;
        }


        
    public void setIus(IUserServices ius) {
            
    this.ius = ius;
        }


        
    public ActionForward test(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response) 
    {
            UserForm userForm 
    = (UserForm) form;
            UserVo uv 
    = new UserVo();
            
    try {
                BeanUtils.copyProperties(uv, userForm);
            }
     catch (Exception e) {
                    e.printStackTrace();
            }

            
    boolean add = ius.addUsers(uv);
            System.out.println(uv.getUserName());
            String url 
    = "/error.jsp";
            
    if(add){
                url 
    = "/ok.jsp";
            }

            System.out.println(url);
            
    return new ActionForward(url) ;
        }

    }

    代理
    package com.yz.myActionProxy;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.springframework.web.struts.DelegatingActionProxy;


    public class mySpringActionProxy extends DelegatingActionProxy {

        @Override
        
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                ServletRequest req, ServletResponse resp) 
    throws Exception {
            HttpServletRequest request 
    = (HttpServletRequest) req;
            HttpServletResponse response 
    = (HttpServletResponse) resp;
            request.setCharacterEncoding(
    "utf-8");
            response.setCharacterEncoding(
    "utf-8");
            
    return super.execute(mapping, form, request, response);
        }

    }

    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="userForm" type="com.yz.actions.form.UserForm" />

      
    </form-beans>

      
    <global-exceptions />
      
    <global-forwards />
      
    <action-mappings >
        
    <action
          
    attribute="userForm"
          name
    ="userForm"
          path
    ="/user"
          scope
    ="request"
          type="com.yz.myActionProxy.mySpringActionProxy" 

          parameter
    ="actions"
       
    />
      
    </action-mappings>
        
    <controller processorClass="com.yz.myReq.myReq"></controller>
      
    <message-resources parameter="com.yz.actions.ApplicationResources" />
     
    <!-- 添加一個插件,用來在啟動struts框架的時候,
          同時讀取spring配置文件,啟動spring容器 
    -->
      
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
              
    <set-property property="contextConfigLocation" 
              value
    ="/WEB-INF/applicationContext.xml"/>
     
    </plug-in>
    </struts-config>


    applicationContext.xml
    <?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:util
    ="http://www.springframework.org/schema/util"
        xmlns:p
    ="http://www.springframework.org/schema/p"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xsi:schemaLocation
    ="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
    >
        
        
    <bean id="userDaoImpl" class="com.yz.dao.impl.IuserDaoImpl"></bean>
    <!-- action里面有一個ius(service的接口引用),
        他來自  com.yz.services.impl.IUserServicesImpl(指向接口的實現類)
        IUserServicesImpl里面有一個iud(IuserDao接口引用)
        他 ref id為 userDaoImpl(指向接口的實現類)  /user 
        
    -->
        
    <bean id="intfUs" class="com.yz.services.impl.IUserServicesImpl">
            
    <property name="iud">
                
    <ref bean="userDaoImpl"/>
            
    </property>
        
    </bean>
        
        
    <!-- name必須和action的path一致 -->
        <bean name="/user" class="com.yz.actions.action.UserAction">

            
    <property name="ius" ref="intfUs"></property>
        
    </bean>
    </beans>

    <!--
        整合思路:
          1、 將 Strut 動作管理委托給 Spring。
          2、您可以通過在 struts-config 動作映射中注冊一個代理來實現。代理負責在 Spring 環境中查找 Struts 動作。由于動作在 Spring 的控制之下,所以它可以填充動作的 JavaBean 屬性,并為應用諸如 Spring 的 AOP 攔截器之類的特性帶來了可能。 
         優缺點: 
            1、動作委托解決方法是這三種方法中最好的。  Struts 動作不了解 Spring,不對代碼作任何改變就可用于非 Spring 應用程序中。RequestProcessor 的改變不會影響它,并且它可以利用 Spring AOP 特性的優點。 
            2、動作委托的優點不止如此。一旦讓 Spring 控制您的 Struts 動作,您就可以使用 Spring 給動作補充更強的活力。例如,沒有 Spring 的話,所有的 Struts 動作都必須是線程安全的。如果您設置 標記的 singleton 屬性為“false”,那么不管用何種方法,您的應用程序都將在每一個請求上有一個新生成的動作對象。您可能不需要這種特性,但是把它放在您的工具箱中也 很好。您也可以利用 Spring 的生命周期方法。例如,當實例化 Struts 動作時, 標記的 init-method 屬性被用于運行一個方法。類似地,在從容器中刪除 bean 之前,destroy-method 屬性執行一個方法。這些方法是管理昂貴對象的好辦法,它們以一種與 Servlet 生命周期相同的方式進行管理
    -->

    Feedback

    # re: 小毅總結之--->spring整合struts的三種方式  回復  更多評論   

    2008-11-07 09:45 by 頂!
    頂!

    posts - 0, comments - 21, trackbacks - 0, articles - 101

    Copyright © H2O

    主站蜘蛛池模板: 亚洲黄色中文字幕| 97精品免费视频| 亚洲色大成网站www永久男同 | 亚洲视频免费在线观看| 免费一区二区三区四区五区| 黄色网址免费大全| 一个人免费视频观看在线www| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲电影唐人社一区二区| 国产亚洲精品美女久久久| 亚洲日韩人妻第一页| 国产公开免费人成视频| 久久久久国色AV免费看图片| 在线a免费观看最新网站| a毛片全部播放免费视频完整18| 免费国产va在线观看| 亚洲AV成人无码久久WWW| 亚洲精品一二三区| 亚洲av乱码一区二区三区| 亚洲最大福利视频网站| 亚洲AV午夜成人影院老师机影院| 精品国产亚洲一区二区在线观看| 免费一级毛片在线播放| 国产大片91精品免费观看男同 | 亚洲伊人色一综合网| 亚洲视频欧洲视频| 久久精品国产亚洲av麻豆色欲| 亚洲成AV人片一区二区密柚| 亚洲va无码专区国产乱码| 国产成人精品日本亚洲| 久久久无码精品亚洲日韩蜜桃| 亚洲成色在线影院| 久久青青草原亚洲av无码app | 特级做A爰片毛片免费看无码| 成人免费av一区二区三区| 成人性生交大片免费看好| 久久精品国产免费| 9277手机在线视频观看免费| 国产精品永久免费10000| 国产成人精品免费视频动漫| 国产免费不卡v片在线观看|