真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

spring怎么與struts結(jié)合使用

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)spring怎么與struts結(jié)合使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)提供成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì),成都品牌網(wǎng)站建設(shè)廣告投放平臺(tái)等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十年的網(wǎng)站開發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破數(shù)千家,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.

Struts調(diào)用流程如下圖所示。

spring怎么與struts結(jié)合使用

         看到這幅圖一下子就能了解了struts的原理。Spring的核心就是IOC容器和AOP,所以我們用spring主要是管理業(yè)務(wù)對(duì)象和事務(wù)的管理,所以主要是Model層來讓spring管理,這是我們的一種方案。

第一種集成方案在Action中取得beanFactory

         還記的在上篇文章中,測(cè)試的時(shí)候是在單元測(cè)試中拿到的BeanFactory,與struts結(jié)合就是在Action中取得beanFactory。步驟如下。

1、          建立一個(gè)web項(xiàng)目。

2、          建立相關(guān)頁面,代碼如下所示。

      Login.jsp代碼入下所示。

<%@ pagelanguage="Java" contentType="text/html; charset=GB18030"
  pageEncoding="GB18030"%>




Insert titlehere


    
       用戶:
密碼:

Login_success.jsp 

<%@ pagelanguage="java" contentType="text/html; charset=GB18030"
  pageEncoding="GB18030"%>




Insert titlehere


    xx,用戶登錄成功!
 


3、 配置struts環(huán)境,關(guān)于struts的配置,拷貝struts和jstl的依賴包;在web.xml中配置ActionServlet,提供struts-config.xml文件。前篇文中有說明,在此就不贅述了。

struts-config.xml代碼如下所示。


    
        
    
    
        
        
        
    
     

4、 配置spring環(huán)境,拷貝spring相關(guān)jar包,建立spring配置文件applicationContext-beans.xml。

applicationContext-beans.xml代碼如下所示。


    

5、 建立相關(guān)的Action和ActionForm。代碼如下所示。

      LoginAction.java代碼如下所示。

public class LoginAction extendsAction {
    @Override
    publicActionForward execute(ActionMapping mapping, ActionForm form,
           HttpServletRequestrequest, HttpServletResponse response)
           throwsException {
       LoginActionFormlaf = (LoginActionForm)form;
       Stringusername = laf.getUsername();
       Stringpassword = laf.getPassword();
        //但是我們每次都要去調(diào)用,去創(chuàng)建太麻煩了.
       //我們?cè)谶@里只需要去配置Listener就可以了,spring給實(shí)現(xiàn)好了.
       BeanFactoryfactory = newClassPathXmlApplicationContext("applicationContext.xml");
       UserManageruserManager = (UserManager)factory.getBean("userManager");
       userManager.login(username,password);
    }
}

      LoginActionForm.java代碼如下所示。

public class LoginActionFormextends ActionForm {
    //表單上有什么提供什么屬性.
    //名字一定要與表單中的一樣.
    privateString username;
    publicString getUsername() {
       returnusername;
    }
    publicvoid setUsername(String username) {
       this.username= username;
    }
    privateString password;
    publicString getPassword() {
       returnpassword;
    }
    publicvoid setPassword(String password) {
       this.password= password;
    }
}

 6、 建立業(yè)務(wù)邏輯層,代碼如下所示。

      UserManager代碼如下所示。

public interface UserManager {
    publicvoid login(String username, String password);
}

      UserManagerImpl.java代碼如下所示。

public class UserManagerImplimplements UserManager {
    publicvoid login(String username, String password) {
       System.out.println("UserManagerImpl"+"username="+ username);
    }
} 

7、 web.xml配置文件代碼如下所示。


  action
  org.apache.struts.action.ActionServlet
  
   config
   /WEB-INF/struts-config.xml
  
  
   debug
   2
  
  
   detail
   2
  
  2
 

      就這樣我們?cè)贚oginAction中,使用beanFactory讀取spring配置文件,找到UserManagerImpl實(shí)例。如果每次在Action中讀取application-beans.xml文件,我們是否可以在服務(wù)器啟動(dòng)的時(shí)候就就創(chuàng)建BeanFactory呢?在這里我們可以使用spirng的工具WebApplicationContextUtils.getRequiredWebApplicationContext()從  ServletContext中  取得BeanFactory,然后再web.xml中配置Spring的Listener。

修改后,LoginAction代碼如下所示。

public class LoginAction extendsAction {
    @Override
    publicActionForward execute(ActionMapping mapping, ActionForm form,
           HttpServletRequestrequest, HttpServletResponse response)
           throwsException {
       LoginActionFormlaf = (LoginActionForm)form;
       Stringusername = laf.getUsername();
       Stringpassword = laf.getPassword();
       //用工具包直接拿出來就可以了。
       BeanFactoryfactory =WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
       UserManageruserManager = (UserManager)factory.getBean("userManager");
       userManager.login(username,password);
       returnmapping.findForward("success");
    }
}   

      加入相關(guān)配置,web.xml代碼如下所示。


    contextConfigLocation
    classpath:applicationContext-*.xml
 
  
    org.springframework.web.context.ContextLoaderListener
 

這種方案缺點(diǎn):

     我們?cè)谠贏ction中仍然看到Spring相關(guān)東西,看到Spring相關(guān)類,要是程序只看到的是接口,那要怎么做呢?

     第二種方案,將struts的Aciton交給Spring來創(chuàng)建,讓代理Action負(fù)責(zé)拿到beanFactory,根據(jù)Path名稱到IOC中把對(duì)應(yīng)的Action取出來。

我們是在Model層應(yīng)用spring,在Action中取得BeanFactory,然后通過SpringIOC來找到Model層的bean。但是這這樣存在一些問題,我們?cè)贏ction中使用的是Spring相關(guān)的靜態(tài)類,這就說明我們依賴的是Spring的靜態(tài)類,我們希望所依賴的是接口而不是類,符合設(shè)計(jì)原則,面向接口編程,這樣也容易擴(kuò)展和維護(hù)。于是在此基礎(chǔ)上進(jìn)行改進(jìn)。

第二種方案是將Struts的Action交給Spring創(chuàng)建,這樣業(yè)務(wù)邏輯對(duì)象將被注入,這樣就避免了依賴查找,而Spring中會(huì)有一個(gè)代理Action,通過代理ActionProxy取得banFactory。方案一和方案二的對(duì)比圖如下圖所示。 

這樣就不用Spring的Listener了,所以我們的web.xml配置文件代碼如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
 
  
  index.jsp 
  
  
  
  action 
  org.apache.struts.action.ActionServlet 
   
   config 
   /WEB-INF/struts-config.xml 
   
   
   debug 
   2 
   
   
   detail 
   2 
   
  2 
  

同時(shí)再struts的配置文件,struts-config.xml中,在標(biāo)簽中配置Action,也不再配置我們自己建立的Action,而是配置Spring自己的代理Action。代碼如下所示。

<?xml version="1.0" encoding="ISO-8859-1" ?> 
 
 
   
     
   
   
     
     
     
   
    
 

Spring對(duì)Aciton的配置文件如下所示。applicationContext-actions.xml.

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

在這里配置對(duì)應(yīng)的本系統(tǒng)實(shí)際的Action,注意名字一定要和struts中代理Action一致!并且設(shè)置每次創(chuàng)建一個(gè)新的Action,而不是共用一個(gè)Action,scope="prototype"。

這樣在LoginAction中,我們不用再看到創(chuàng)建Model和工廠的細(xì)節(jié),使用SpringIOC,創(chuàng)建Model,UserManager,并且配置文件中注入LoginAction,這樣LoginAction代碼如下所示。

public class LoginAction extends Action { 
  private UserManager userManager; 
  // 讓spring注入,LoginAction讓Spring管理, 不是讓strus創(chuàng)建而是由spring創(chuàng)建. 
  public void setUserManager(UserManager userManager) { 
    this.userManager = userManager; 
  } 
  @Override 
  public ActionForward execute(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) 
      throws Exception { 
    LoginActionForm laf = (LoginActionForm) form; 
    String username = laf.getUsername(); 
    String password = laf.getPassword(); 
    userManager.login(username, password); 
    return mapping.findForward("success"); 
  } 
} 

上述就是小編為大家分享的spring怎么與struts結(jié)合使用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁名稱:spring怎么與struts結(jié)合使用
當(dāng)前路徑:http://weahome.cn/article/gpshji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部