Struts2框架介紹

1芯杀,一個完整的Java Web所涉及的內(nèi)容包括:(1)Java Bean組件 (2)EJB組件 (3)自定義的JSP標簽

(4)XML (5)Web服務(wù)器和應(yīng)用服務(wù)器

2纲刀,Java Bean在JSP中的應(yīng)用

(class中存放的是JavaBean的路徑)

(1)獲取JavaBean屬性:

(2)給某個JavaBean屬性賦值:

3,Web組件之間的三種關(guān)聯(lián)關(guān)系

(1)請求轉(zhuǎn)發(fā)

(2)URL重定向 response.sendRedirect(...)

(3)包含 <%@ include file=...%>

4,MVC:Model-View-Countroller.即模型-視圖-控制器,是一種軟件設(shè)計模式均蜜。它強制地把應(yīng)用程序的輸入李剖、處理和輸出分開。MVC把應(yīng)用程序分成三個核心模塊:模型囤耳、視圖和控制器篙顺。對于基于請求/響應(yīng)方式的WEB應(yīng)用偶芍,模型位于WEB服務(wù)器端,視圖位于用戶瀏覽器端德玫。

5匪蟀,MVC處理過程:

首先,控制器接收用戶的請求宰僧,并決定應(yīng)該調(diào)用哪個模型進行處理

然后材彪,模型根據(jù)用戶請求進行相應(yīng)的業(yè)務(wù)邏輯處理,并返回數(shù)據(jù)

最后琴儿,控制器調(diào)用相應(yīng)的視圖來格式化模型返回的數(shù)據(jù)段化,并通過視圖呈現(xiàn)給用戶

用Servlet技術(shù)實現(xiàn)控制器的功能,用JavaBean技術(shù)實現(xiàn)模型的功能造成。

6显熏,Struts:實質(zhì)上是在JSP Model2上實現(xiàn)的一個MVC框架。在Struts框架中晒屎,模型由實現(xiàn)業(yè)務(wù)邏輯的JavaBean或EJB組件構(gòu)成喘蟆,控制器由ActionServlet和Action來實現(xiàn),視圖由一組Jsp文件構(gòu)成鼓鲁。

7蕴轨,ActionForm Bean:Struts框架利用文本進行視圖和控制器之間表單數(shù)據(jù)的傳遞。

8骇吭,Struts的控制器:由ActionServlet類和Action類來實現(xiàn)

ActionServlet類:在MVC模型中扮演中央控制器的角色尺棋,主要負責接收HTTP請求信息,根據(jù)配置文件struts_config.xml的配置信息绵跷,把請求轉(zhuǎn)發(fā)給適當?shù)腁ction對象膘螟。

Action類:負責調(diào)用模型的方法,更新模型的狀態(tài)碾局,并幫助控制應(yīng)用程序的流程荆残。

在配置文件中,每一個Action的映射信息都通過一個元素來配置净当。

9内斯,軟件的分層結(jié)構(gòu):表現(xiàn)層、業(yè)務(wù)邏輯層像啼、數(shù)據(jù)訪問層俘闯。

10,Web項目的結(jié)構(gòu):src目錄下存放Java源文件忽冻,源文件編譯后會自動輸出到WebRoot/WEB-INF/classes目錄下真朗,WebRoot是Web應(yīng)用程序的根目錄。有時候各個分塊代碼是正確的僧诚,但就是發(fā)送錯誤遮婶,可能就是因為文件放置的位置不當造成的蝗碎,可通過調(diào)試解決。

11旗扑,F(xiàn)ilterDispatcher:Struts2框架是基于MVC模式開發(fā)的蹦骑,它提供了一個核心控制器,用于對所有的請求進行統(tǒng)一處理臀防,這個控制器是由一個名為FilterDispatcher的Servlet過濾器來充當?shù)摹?/p>

12眠菇,web.xml和struts.xml

web.xml:Web應(yīng)用程序的部署描述符文件

struts.xml:對action進行配置

13,Struts 2 的開發(fā)步驟:

(1)準備類庫

(2) 在web.xml文件中配置FilterDispatcher袱衷。

(3)開發(fā)action捎废。針對每一個功能點,編寫一個action類祟昭。

(4)編寫相關(guān)的結(jié)果頁面。針對action返回的結(jié)果代碼怖侦,編寫相應(yīng)的結(jié)果頁面

(5)在Web應(yīng)用程序的WEB-INF/classes目錄下創(chuàng)建struts.xml篡悟,對action進行配置,將頁面與結(jié)果頁面關(guān)聯(lián)在一個匾寝。

14搬葬,使用領(lǐng)域?qū)ο髞斫邮沼脩糨斎搿鹘y(tǒng)的Web應(yīng)用程序調(diào)用HttpServletRequest的getParameter方法從請求中獲取數(shù)據(jù)艳悔。Struts2的action完全與Web層解耦急凰,要獲取Web層的數(shù)據(jù),需要使用ActionContext,它為action提供了一個執(zhí)行上下文猜年。

15抡锈,Struts 自動實例化對象特性

該請求等同于調(diào)用:action.getUser().setUsername(...);

Struts2 會遍歷所有的請求參數(shù),自動依次實例化任何用于填充數(shù)據(jù)的對象乔外。上述例子Struts將依次調(diào)用一下方法:

action.getUser();

action.setUser(new User());

action.getUser().setUsername();

16,struts2的執(zhí)行流程:

\ |/ struts.xml

\|/

類的實現(xiàn)

17床三,使用action的屬性接收用戶輸入,此時不需要使用模型對象杨幼。

18撇簿,Struts2對HttpServletRequest、HttpSession和ServletContext進行了封裝差购,構(gòu)造了三個Map對象來替代這三種對象四瘫,在Action中,直接使用對應(yīng)的Map對象來保存和讀取數(shù)據(jù)欲逃。

使用com.opensymphony.xwork2.ActionContext類

ActionContext是action執(zhí)行的上下文

(1)get(object key):得到請求Map對象找蜜,需要為get()方法傳遞參數(shù)"request"。

(2)getSession():HttpSession的Map對象

(3)getApplication:ServletContext的Map對象

19稳析,Struts2框架由兩部分組成:XWork2和Struts锹杈。XWork提供了很多核心功能:IoC容器撵孤,強大的表達式語言(OGNL),數(shù)據(jù)類型轉(zhuǎn)換竭望,驗證和可插入的配置邪码。XWork框架的核心概念包括:aciton咬清、攔截器和result。

攔截器的工作原理:

一個HTTP請求到達Struts2 的FilterDispatcher之后旧烧,就會被轉(zhuǎn)換成一個action command影钉。這個action command在穿越了一系列Struts2和XWork的攔截器之后,最后執(zhí)行用戶編寫的Action實例平委。在Action執(zhí)行之后夺谁,響應(yīng)還會穿越相同的攔截器(相反順序)廉赔,最后通過Struts2的HttpServletResponse轉(zhuǎn)換成Web可識別的響應(yīng)(例如JSP)。

20匾鸥,Struts2的體系結(jié)構(gòu)

(1)一個初始的請求到達Servlet容器(tomcat)后蜡塌,將被傳遞給一個標準過濾器鏈勿负。

(2)接下來,必須的FilterDispatcher被調(diào)用奴愉,它輪詢ActionMapper以便確定這個請求是否應(yīng)該調(diào)用一個action.

(3)如果ActionMapper確定一個Action應(yīng)該被調(diào)用,那么FilterDispatcher就把控制權(quán)委派給ActionProxy迫吐,ActionProxy從struts.xml文件中讀取配置信心账忘。

(4)ActionProxy創(chuàng)建一個實現(xiàn)了命令模式的ActionInvocation。ActionInvocation在調(diào)用action之前會依次調(diào)用所用配置的攔截器鳖擒。

(5)一旦action執(zhí)行返回,ActionInvocation就要查找這個acion的結(jié)果碼所對應(yīng)的result(action的結(jié)果碼和result的映射在struts.xml文件中配置)戳稽,然后執(zhí)行這個result。

21互躬,Struts2的配置文件

(1)web.xml:Web部署描述符颂郎,包括所有必需的框架組件。由開發(fā)人員編寫乓序。

(2)struts.xml:主要的配置文件,包含result映射寄雀,action映射陨献,攔截器配置等。由開發(fā)人員編寫

(3)struts.properties:struts2框架的屬性配置急膀,由開發(fā)人員編寫

(4)struts-default.xml:Struts2提供的默認設(shè)置坛猪,由框架提供皂股。

(5)strits-plugin.xml:struts2框架的插件所用的配置文件,由插件提供呜呐。

22,對Struts2標簽庫的配置

的子元素的內(nèi)容:/struts-tags

/struts-tags

23,Bean配置

Struts2是一個可擴展的框架洋机,框架的核心組件都是可配置的洋魂,這些組件通過Struts2自己的依賴注入容器來裝配。通過bean元素來配置組件實現(xiàn)類衔肢。

24豁翎,包配置

Struts2中的包類似于Java中的包,提供了將action心剥、result背桐、攔截器等組織為一個邏輯單元的一種方式链峭,提高了重用性疑苫。Struts2中的包可以擴展另外的包,從而”繼承”原有包的所用定義捍掺。

package元素的屬性

name:被其他包引用時的鍵extends:指定要擴展的包

namespace:指定名稱空間abstract:聲明包抽象的

25,名稱空間(Namespace)配置

namespace屬性可以將包中的action配置為不同的名稱空間曲横,這樣在不同的名稱空間中可以使用同名的action不瓶。

26,包含(include)配置

分而治之,在每個模塊單獨提供一個配置文件熙参,對其進行配置麦备,然后再struts.xml文件中使用include元素來包含其他的配置文件

27,攔截器(Interceptor)配置

攔截器允許你在action執(zhí)行前后插入代碼執(zhí)行黍匾。攔截器可以為action動態(tài)添加輸入驗證呛梆、對象組裝、權(quán)限控制填物、日志記錄等功能,而不需要修改action升薯。

為action配置引用的攔截器雁刷,首先需要在interceptor元素中使用interceptor元素定義攔截器,然后再action元素中使用interceptor-ref元素指定引用的攔截器责语。interceptor元素有兩個必需的屬性:name和class。前者指定攔截器的名字坤候,后者指定攔截器的完整類名。

如果一個action需要多個攔截器智末,可以將多個攔截器組合在一起徒河,組成一個攔截器棧,然后再action中直接引用攔截器棧即可由蘑。interceptor-stack代兵。

如果多個action都需要引用相同的攔截器,那可以使用default-interceptor-ref元素來定義一個默認的攔截器棧引用裳擎,這樣就不需要為每個action指定引用信息了思币。

28,Action映射

action映射:將一個請求URI(即aciton名字)映射到一個action類支救,當一個請求匹配某個action的名字時各墨,框架就使用這個映射來確定如何處理請求启涯。struts.xml文件中的每一個action元素就是一個action映射。

action元素的屬性

name:action的名字结洼,用于匹配請求URIclass:Action實現(xiàn)類的完整類名

method:執(zhí)行Action時調(diào)用的方法converter:應(yīng)用于action類型轉(zhuǎn)換器的完整類名

29松忍,method屬性

在配置action時,可以通過action元素屬性來指定action調(diào)用的方法,所指定的方法必須遵循與execute方法相同的格式酥艳。這樣就可以在同一個類中完成相關(guān)的任務(wù)爬骤,而不需要去編寫不同Action類。(解釋:本來一個任務(wù)對應(yīng)一個class骤铃,現(xiàn)在一個任務(wù)對應(yīng)一個class的一個方法)

30坷剧,模擬struts中的ForwardAction

在struts中,所有的URL都指向action补鼻,而不是JSP頁面雅任。但有時只需要轉(zhuǎn)發(fā)請求,不想再編寫action類的做法:

將action元素的class屬性省略沪么,那將默認使用com.opensymphony.xwork2.ActionSupport類也殖,如:

/index.jsp

31,默認的action

如果請求的一個action不存在闺阱,將顯示錯誤州胳,此時可以指定一個默認的action逸月,如果一個請求沒有其他的action匹配,那么默認的action將被執(zhí)行瓤湘。

默認的action使用default-action-ref元素來聲明恩尾。

32,result:一個result代表一個可能的輸出木人。當Action類的方法執(zhí)行完成時,它返回一個字符串類型的結(jié)果碼醒第,框架根據(jù)這個結(jié)果碼選擇對應(yīng)的result,向用戶輸出圃伶。

33蒲列,result元素的屬性

name:指定result的邏輯名type:指定result類型,不同類型的result代表了不同類型的結(jié)果輸出

34侥猩,result映射配置小記

絕對路徑以斜杠(/)開頭抵赢,相對于當前的Web應(yīng)用程序的上下文路徑;相對路徑不以斜杠(/)開頭划提,相對于當前執(zhí)行的action路徑邢享。

35,struts2中預(yù)定義的結(jié)果類型:

(1)dispatcher:用于web資源的集成伊履,包括jsp的集成

(2)redirect:用于重定向到另外的URL(WEB資源)

(3)redirectAction:用于定向到另外的action映射

.......

36,dispatcher結(jié)果類型

有兩個屬性:location和parse款违。可通過struts.xml配置文件中的result元素的param子元素來設(shè)置哄辣。其中l(wèi)ocation參數(shù)用于指定action執(zhí)行完畢后要轉(zhuǎn)向的目標資源递惋,parse屬性是一個布爾類型的值溢陪,如果為true,則解析location參數(shù)中的OGNL表達式杉编。

37,全局結(jié)果

全局結(jié)果在包中定義邓馒,在這個包中的所有action可以共享結(jié)果光酣。全局結(jié)果也是使用result元素來配置,只不過不是在aciton元素中嵌套救军,而是在global-results元素中嵌套。

38唱遭,動態(tài)結(jié)果

動態(tài)結(jié)果:在配置時不知道要執(zhí)行哪一個結(jié)果,在運行時刻才能確定執(zhí)行的結(jié)果

${屬性名}

39疫鹊,異常處理

在struts.xml文件中配置異常映射司致,將一種異常類型和一個結(jié)果對應(yīng)起來,由這個結(jié)果負責對異常作出響應(yīng)锈拨。如果Action的方法在執(zhí)行期間拋出一個異常羹唠,這個異常會被框架自動捕獲,然后框架根據(jù)配置文件中的異常映射缝彬,找到預(yù)定義的結(jié)果來對異常作出響應(yīng)哺眯。

異常映射攔截器已經(jīng)配置好,剩下的工作就是使用exception-mapping元素來配置異常映射一疯,將異常類型映射到指定的結(jié)果夺姑。exception-mapping有兩個屬性:exception和result。前者指定一個異常類型的完整類名眉睹,后者指定對該類型進行處理的結(jié)果的名字。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慕蔚,一起剝皮案震驚了整個濱河市斋配,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌十偶,老刑警劉巖园细,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猛频,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹿寻,警方通過查閱死者的電腦和手機毡熏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱窘,“玉大人财搁,你說我怎么就攤上這事〈钊澹” “怎么了提茁?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铃岔。 經(jīng)常有香客問我丹弱,道長铲咨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任隆檀,我火速辦了婚禮粹湃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘为鳄。我一直安慰自己孤钦,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布静袖。 她就那樣靜靜地躺著俊扭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捐康。 梳的紋絲不亂的頭發(fā)上庸蔼,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音倾鲫,去河邊找鬼萍嬉。 笑死,一個胖子當著我的面吹牛磕道,可吹牛的內(nèi)容都是我干的行冰。 我是一名探鬼主播伶丐,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哗魂,長吁一口氣:“原來是場噩夢啊……” “哼漓雅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起组题,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抱冷,失蹤者是張志新(化名)和其女友劉穎旺遮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趣效,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡跷敬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年西傀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拥褂。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡饺鹃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镊屎,到底是詐尸還是另有隱情茄螃,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布用狱,位于F島的核電站,受9級特大地震影響摇展,放射性物質(zhì)發(fā)生泄漏署海。R本人自食惡果不足惜医男,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刀森。 院中可真熱鬧报账,春花似錦、人聲如沸榜晦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽识窿。三九已至脑融,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甥温,已是汗流浹背妓布。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留史简,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓跺讯,卻偏偏與公主長得像殉农,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愈污,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容