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

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

Java中Struts2處理流程是怎樣的

本篇內(nèi)容介紹了“Java中Struts2處理流程是怎樣的”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元興安盟做網(wǎng)站,已為上家服務(wù),為興安盟各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

看看Struts-2的處理流程:

1) Browser產(chǎn)生一個(gè)請(qǐng)求并提交框架來處理:根據(jù)配置決定使用哪些攔截器、action類和結(jié)果等。

2) 請(qǐng)求經(jīng)過一系列攔截器:根據(jù)請(qǐng)求的級(jí)別不同攔截器做不同的處理。這和Struts-1的RequestProcessor類很相似。

3) 調(diào)用Action: 產(chǎn)生一個(gè)新的action實(shí)例,調(diào)用業(yè)務(wù)邏輯方法。

4) 調(diào)用產(chǎn)生結(jié)果:匹配result class并調(diào)用產(chǎn)生實(shí)例。

5) 請(qǐng)求再次經(jīng)過一系列攔截器返回:過程也可配置減少攔截器數(shù)量

6) 請(qǐng)求返回用戶:從control返回servlet,生成Html。

這里很明顯的一點(diǎn)是不存在FormBean的作用域封裝,直接可以從Action中取得數(shù)據(jù)。 這里有一個(gè)Strut-2配置的web.xml文件:

        controller                  org.apache.struts.action2.dispatcher.FilterDispatcher                              cotroller                   /*        

注意到以往的servlet變成了filter,ActionServlet變成了FilterDispatcher,*.do變成了/*。filter配置定義了名稱(供關(guān)聯(lián))和filter的類。filter mapping讓URI匹配成功的的請(qǐng)求調(diào)用該filter。默認(rèn)情況下,擴(kuò)展名為 ".action "。這個(gè)是在default.properties文件里的 "struts.action.extension "屬性定義的。

default.properties是屬性定義文件,通過在項(xiàng)目classpath路徑中包含一個(gè)名為“struts.properties”的文件來設(shè)置不同的屬性值。而Struts-2的默認(rèn)配置文件名為struts.xml。由于1和2的action擴(kuò)展名分別為.do和.action,所以很方便能共存。我們?cè)賮砜匆粋€(gè)Struts-2的action代碼:

public class MyAction {  public String execute() throws Exception {  //do the work    return "success ";  }  }

很明顯的區(qū)別是不用再繼承任何類和接口,返回的只是一個(gè)String,無參數(shù)。實(shí)際上在Struts-2中任何返回String的無參數(shù)方法都可以通過配置來調(diào)用action。所有的參數(shù)從哪里來獲得呢?答案就是Inversion of Control技術(shù)(控制反轉(zhuǎn))。筆者盡量以最通俗的方式來解釋,我們先試圖讓這個(gè)Action獲得reuqest對(duì)象,這樣可以提取頁面提交的任何參數(shù)。那么我們把request設(shè)為一個(gè)成員變量,然后需要一個(gè)對(duì)它的set方法。由于大部分的action都需要這么做,我們把這個(gè)set方法作為接口來實(shí)現(xiàn)。

public interface ServletRequestAware {  public void setServletRequest(HttpServletRequest request);  }  public class MyAction implements ServletRequestAware {  private HttpServletRequest request;  public void setServletRequest(HttpServletRequest request) {  this.request = request;  }  public String execute() throws Exception {  // do the work directly using the request  return Action.SUCCESS;  }  }

那么誰來調(diào)用這個(gè)set方法呢?也就是說誰來控制這個(gè)action的行為,以往我們都是自己在適當(dāng)?shù)牡胤綄懮弦痪鋋ction.setServletRequest(…),也就是控制權(quán)在程序員這邊。然而控制反轉(zhuǎn)的思想是在哪里調(diào)用交給正在運(yùn)行的容器來決定,只要利用Java反射機(jī)制來獲得Method對(duì)象然后調(diào)用它的invoke方法傳入?yún)?shù)就能做到,這樣控制權(quán)就從程序員這邊轉(zhuǎn)移到了容器那邊。程序員可以減輕很多繁瑣的工作更多的關(guān)注業(yè)務(wù)邏輯。Request可以這樣注入到action中,其他任何對(duì)象也都可以。為了保證action的成員變量線程安全,Struts-2的action不是單例的,每一個(gè)新的請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的action實(shí)例。

那么有人會(huì)問,到底誰來做這個(gè)對(duì)象的注入工作呢?答案就是攔截器。攔截器又是什么東西?筆者再來盡量通俗的解釋攔截器的概念。大家要理解攔截器的話,首先一定要理解GOF23種設(shè)計(jì)模式中的Proxy模式。

A對(duì)象要調(diào)用f(),它希望代理給B來做,那么B就要獲得A對(duì)象的引用,然后在B的f()中通過A對(duì)象引用調(diào)用A對(duì)象的f()方法,最終達(dá)到A的f()被調(diào)用的目的。有沒有人會(huì)覺得這樣很麻煩,為什么明明只要A.f()就可以完成的一定要封裝到B的f()方法中去?有哪些好處呢?

1) 這里我們只有一個(gè)A,當(dāng)我們有很多個(gè)A的時(shí)候,只需要監(jiān)視B一個(gè)對(duì)象的f()方法就可以從全局上控制所有被調(diào)用的f()方法。

2) 另外,既然代理人B能獲得A對(duì)象的引用,那么B可以決定在真正調(diào)A對(duì)象的f()方法之前可以做哪些前置工作,調(diào)完返回前可有做哪些后置工作。

講到這里,大家看出來一點(diǎn)攔截器的概念了么?它攔截下一調(diào)f()方法的請(qǐng)求,然后統(tǒng)一的做處理(處理每個(gè)的方式還可以不同,解析A對(duì)象就可以辨別),處理完畢再放行。這樣像不像對(duì)流動(dòng)的河水橫切了一刀,對(duì)所有想通過的水分子進(jìn)行搜身,然后再放行?這也就是AOP(Aspect of Programming面向切面編程)的思想。

Anyway,Struts-2只是利用了AOP和IoC技術(shù)來減輕action和框架的耦合關(guān)系,力圖到***程度重用action的目的。在這樣的技術(shù)促動(dòng)下,Struts-2的action成了一個(gè)簡(jiǎn)單被框架使用的POJO(Plain Old Java Object)罷了。實(shí)事上AOP和IoC的思想已經(jīng)遍布新出來的每一個(gè)框架上,他們并不是多么新的技術(shù),利用的也都是JDK早已可以最到的事情,它們代表的是更加面向接口編程,提高重用,增加擴(kuò)展性的一種思想。

“Java中Struts2處理流程是怎樣的”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


當(dāng)前題目:Java中Struts2處理流程是怎樣的
鏈接URL:http://weahome.cn/article/gsgpoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部