<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

    主站蜘蛛池模板: 国产成人3p视频免费观看| 亚洲熟妇av午夜无码不卡| 日韩一级视频免费观看| 热re99久久6国产精品免费| 人妻18毛片a级毛片免费看| 亚洲色大18成人网站WWW在线播放 亚洲色大成WWW亚洲女子 | 成人A片产无码免费视频在线观看| 亚洲国产午夜精品理论片在线播放 | 99国产精品免费视频观看| 乱爱性全过程免费视频| 亚洲国产成人无码AV在线影院| 亚洲VA中文字幕无码一二三区 | 亚洲sss综合天堂久久久| 亚洲av日韩av无码| 亚洲AV无码专区日韩| 在线免费一区二区| 2021国产精品成人免费视频| 免费一级毛片在线播放视频| xxxxx做受大片在线观看免费| 老湿机一区午夜精品免费福利| 亚洲人成网站18禁止| 亚洲另类自拍丝袜第1页| 亚洲视频在线观看免费| 亚洲av日韩av无码黑人| 亚洲AV日韩AV永久无码绿巨人| 亚洲国产另类久久久精品黑人| 亚洲美日韩Av中文字幕无码久久久妻妇| 国产成人免费一区二区三区| 精品久久久久久久免费加勒比| 无码中文在线二区免费| 在线看片韩国免费人成视频| 2019中文字幕免费电影在线播放| 69视频在线观看高清免费| 日韩免费无码视频一区二区三区| 99免费在线观看视频| 久草免费福利资源站| 99久久久国产精品免费牛牛 | 成人黄网站片免费视频| 中文字幕日本人妻久久久免费| 青青操免费在线视频| 国产精品免费高清在线观看|