Struts2 入門講解.pptx_第1頁(yè)
Struts2 入門講解.pptx_第2頁(yè)
Struts2 入門講解.pptx_第3頁(yè)
Struts2 入門講解.pptx_第4頁(yè)
Struts2 入門講解.pptx_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Struts2 入門講解,趙洋2012-5-22,Struts2核心原理,Struts2概述 Struts2功能概述 Struts2使用方法,概述:,1:Struts2是一個(gè)運(yùn)行于Web容器的表示層框架,其核心作用是幫助我們處理Http請(qǐng)求 2:Struts2代碼級(jí)別的實(shí)現(xiàn),無(wú)論如何進(jìn)行封裝,都離不開對(duì)Servlet標(biāo)準(zhǔn)或者JSP標(biāo)準(zhǔn)所指定的底層API的調(diào)用。從這個(gè)角度來(lái)說(shuō)Struts2只是實(shí)現(xiàn)了一個(gè)具備通用性的HTTP請(qǐng)求處理機(jī)制,支持的Servlet標(biāo)準(zhǔn)的最低版本要求是2.4,相應(yīng)的JSP標(biāo)準(zhǔn)的最低版本要求是2.0 3:Struts2是由WebWork演變而來(lái)的,在技術(shù)上完全繼承了WebW

2、ork的核心,舍棄了Struts1的代碼,與WebWork有著相同的核心依賴-xwork Struts2核心-xwork2.0.x版本對(duì)照 Struts2-core-2.0.x-xwork2.0.x Struts2-core-2.1.x-xwork2.1.x Struts2-core-2.2.x-xwork2.2.x,概述:,4:嚴(yán)格意義上的Struts2有兩個(gè)部分組成一個(gè)是真正意義上的Struts2另一個(gè)是Xwork,從職責(zé)上來(lái)說(shuō),Xwork才是真正實(shí)現(xiàn)MVC的框架,Struts2的工作是在對(duì)Http請(qǐng)求進(jìn)行一定處理后,委托xwork完成真正的邏輯處理,將Web容器與MVC實(shí)現(xiàn)分離,是Str

3、uts2區(qū)別于其他Web框架的最重要的特性 5:Struts2兩條主線 1:初始化主線 2:http請(qǐng)求處理主線(2個(gè)執(zhí)行階段) (1):http請(qǐng)求預(yù)處理(與Web容器交互,struts2主導(dǎo)程序控制權(quán)) (2):xwork執(zhí)行業(yè)務(wù)邏輯(與Web容器解耦,xwork主導(dǎo)程序控制權(quán)) 6:Struts2線程安全核心ThreadLocal(每一個(gè)線程都有其不同的ThreadLocalMap) 7:Struts2中的容器(Container):由一系列對(duì)象接口組成,容納了Struts2依賴注入的對(duì)象實(shí)例,是Struts2運(yùn)行環(huán)境的核心構(gòu)建,概述:,結(jié)論:,Struts 2是Struts的下一代產(chǎn)品

4、,是在 struts 和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)的差別巨大。Struts 2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與Servlet API完全脫離開,所以Struts 2可以理解為WebWork的更新產(chǎn)品。雖然從Struts 1到Struts 2有著太大的變化,但是相對(duì)于WebWork,Struts 2只有很小的變化。 Struts和Webwork同為服務(wù)于Web的一種MVC框架,從某種程度上看,Struts2是從WebWork2上升級(jí)得

5、到的。甚至Apache的官方文檔也講:WebWork2到Struts2是平滑的過(guò)渡。我們甚至也可以說(shuō)Struts2就是WebWork2.3而已。在很多方面Struts僅僅是改變了WebWork下的名稱。Struts2對(duì)應(yīng)的有自己的標(biāo)簽,并且功能強(qiáng)大。Webwork也有自己的標(biāo)簽。在2005年12月,WebWork與Struts Ti決定合并, 再此同時(shí), Struts Ti 改名為 Struts Action Framework 2.0,成為Struts真正的下一代,功能概述,學(xué)習(xí)目標(biāo),流程 結(jié)構(gòu) 優(yōu)點(diǎn),接收響應(yīng)HTTP請(qǐng)求,請(qǐng)求響應(yīng)流程,請(qǐng)求響應(yīng)流程,1. Servlet容器接收HTTP請(qǐng)求

6、后交給Struts2的StrutsPrepareAndExecuteFilter過(guò)濾器處理, 2. 過(guò)濾器查詢ActionMapper是否請(qǐng)求有可調(diào)用的Aciton, 如有則由Dispatcher實(shí)例獲取ActionProxyFactory,創(chuàng)建ActionProxy及ActionInvocation, 并把請(qǐng)求交給ActionProxy處理; 3. ActionProxy調(diào)用ActionInvocation實(shí)例; (ActionInvocation 是Xwork中Action、Interceptor調(diào)度的核心。 它保存了整個(gè)攔截器棧、ActionContext、Result等信息,由invo

7、ke()發(fā)起對(duì)攔截器及action的調(diào)用) 4. ActionInvocation會(huì)根據(jù)配置加載Action相關(guān)的一系列Interceptor,并按照順序一個(gè)個(gè) 通過(guò)代理模式執(zhí)行Interceptor,最后調(diào)用Action; 5. Action執(zhí)行完畢,Dispatcher負(fù)責(zé)根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果; 6. 然后又按相反的順序執(zhí)行Interceptor,最后回到過(guò)濾器,返回響應(yīng)完成HTTP請(qǐng)求過(guò)程。,Struts2業(yè)務(wù)處理流程,struts2,struts2,處理請(qǐng)求業(yè)務(wù)流程(整體結(jié)構(gòu)),xwork,Struts2業(yè)務(wù)與標(biāo)簽,XWork是什么,XWork是一個(gè)標(biāo)準(zhǔn)的

8、Command模式實(shí)現(xiàn),并且完全從web層脫離出來(lái)。Xwork提供了很多核心功能:前端攔截機(jī)(interceptor),運(yùn)行時(shí)表單屬性驗(yàn)證,類型轉(zhuǎn)換,強(qiáng)大的表達(dá)式語(yǔ)言(OGNL the Object Graph Navigation Language),IoC(Inversion of Control反轉(zhuǎn)控制)容器等。 其目的是:創(chuàng)建一個(gè)泛化的、可重用且可擴(kuò)展的命令模式框架,而不是一個(gè)特定在某個(gè)領(lǐng)域使用的框架。,XWork的應(yīng)用,應(yīng)用層面 容器(業(yè)務(wù)邏輯核心) OGNL(Struts2標(biāo)簽庫(kù)),容器 一個(gè)與具體的業(yè)務(wù)邏輯完全無(wú)關(guān)的額外的編程元素容器來(lái)幫助進(jìn)行對(duì)象的生命周期管理,容器應(yīng)該被設(shè)計(jì)成

9、一個(gè)全局的,統(tǒng)一的編程元素,在最大程度上降低容器對(duì)業(yè)務(wù)邏輯的入侵,容器應(yīng)該提供簡(jiǎn)單而全面的對(duì)象操作接口 由一系列對(duì)象操作的接口組成,其中至少應(yīng)該包含獲取對(duì)象實(shí)例以及管理對(duì)象與對(duì)象之間關(guān)系這兩種方法 容器是一個(gè)輔助的編程元素,他在整個(gè)系統(tǒng)中應(yīng)該被實(shí)例化為一個(gè)全局的 單例的對(duì)象 在容器內(nèi)部進(jìn)行緩存的是對(duì)象實(shí)例的構(gòu)建方法,而不是對(duì)象實(shí)例本身,這就讓容器看起來(lái)想一個(gè)工作的集合,能夠根據(jù)不同的 要求,制造出不同類型的對(duì)象實(shí)例 xwork還需要一類緩存的幫助,這累緩存用于記錄對(duì)象和對(duì)象之間的依賴關(guān)系,這一類緩存數(shù)據(jù)在xwork容器的內(nèi)部被稱之為注入器 Injector,XWork的應(yīng)用,OGNL( Str

10、uts2標(biāo) 簽庫(kù) ) OGNL是一個(gè)開源的表達(dá)式引擎,通過(guò)使用OGNL,我們能夠通過(guò)表達(dá)式存取Java對(duì)象樹中的任意屬性和調(diào)用java對(duì)象樹的方法等 支持對(duì)象方法調(diào)用,如xxx.doSomeSpecial() 支持類靜態(tài)的方法調(diào)用和值訪問(wèn),表達(dá)式的格式為類全名(包括包路徑)方法名 | 值名,例如:java.lang.Stringformat(foo %s, bar)或tutorial.MyConstantAPP_NAME 支持賦值操作和表達(dá)式串聯(lián),如price=100, discount=0.8, calculatePrice(),這個(gè)表達(dá)式會(huì)返回80 訪問(wèn)OGNL上下文(OGNL conte

11、xt)和ActionContext 操作集合對(duì)象,XWork的應(yīng)用,優(yōu)勢(shì):,類: Struts1要求Action類繼承一個(gè)抽象基類。Struts1的一個(gè)普遍問(wèn)題是使用抽象類編程而不是接口。 Struts 2 Action類可以實(shí)現(xiàn)一個(gè)Action接口,也可實(shí)現(xiàn)其他接口,使可選和定制的服務(wù)成為可能。Struts2提供一個(gè)ActionSupport基類去實(shí)現(xiàn)常用的接口。Action接口不是必須的,任何有execute標(biāo)識(shí)的POJO對(duì)象都可以用作Struts2的Action對(duì)象。 線程模式: Struts1 Action是單例模式并且必須是線程安全的,因?yàn)閮H有Action的一個(gè)實(shí)例來(lái)處理所有的請(qǐng)求。

12、單例策略限制了Struts1 Action能作的事,并且要在開發(fā)時(shí)特別小心。Action資源必須是線程安全的或同步的。 Struts2 Action對(duì)象為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒(méi)有線程安全問(wèn)題。(實(shí)際上,servlet容器給每個(gè)請(qǐng)求產(chǎn)生許多可丟棄的對(duì)象,并且不會(huì)導(dǎo)致性能和垃圾回收問(wèn)題) Servlet 依賴: Struts1 Action 依賴于Servlet API ,因?yàn)楫?dāng)一個(gè)Action被調(diào)用時(shí)HttpServletRequest 和 HttpServletResponse 被傳遞給execute方法。 Struts 2 Action不依賴于容器,允許Action脫離容器單獨(dú)被測(cè)試

13、。如果需要,Struts2 Action仍然可以訪問(wèn)初始的request和response。但是,其他的元素減少或者消除了直接訪問(wèn)HttpServetRequest 和 HttpServletResponse的必要性。,優(yōu)勢(shì):,捕獲輸入: Struts1 使用ActionForm對(duì)象捕獲輸入。所有的ActionForm必須繼承一個(gè)基類。因?yàn)槠渌鸍avaBean不能用作ActionForm,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入。動(dòng)態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存在的JavaBean(仍然會(huì)導(dǎo)致有冗余的javabean

14、)。 Struts 2直接使用Action屬性作為輸入屬性,消除了對(duì)第二個(gè)輸入對(duì)象的需求。輸入屬性可能是有自己(子)屬性的rich對(duì)象類型。Action屬性能夠通過(guò) web頁(yè)面上的taglibs訪問(wèn)。Struts2也支持ActionForm模式。rich對(duì)象類型,包括業(yè)務(wù)對(duì)象,能夠用作輸入/輸出對(duì)象。這種 ModelDriven 特性簡(jiǎn)化了taglib對(duì)POJO輸入對(duì)象的引用。 表達(dá)式語(yǔ)言: Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本對(duì)象圖遍歷,但是對(duì)集合和索引屬性的支持很弱。 Struts2可以使用JSTL,但是也支持一個(gè)更強(qiáng)大和靈活的表達(dá)式語(yǔ)言O(shè)bject Gr

15、aph Notation Language (OGNL). 可測(cè)性: 測(cè)試Struts1 Action的一個(gè)主要問(wèn)題是execute方法暴露了servlet API(這使得測(cè)試要依賴于容器)。一個(gè)第三方擴(kuò)展Struts TestCase提供了一套Struts1的模擬對(duì)象(來(lái)進(jìn)行測(cè)試)。 Struts 2 Action可以通過(guò)初始化、設(shè)置屬性、調(diào)用方法來(lái)測(cè)試,“依賴注入”支持也使測(cè)試更容易。,優(yōu)勢(shì):,綁定值到頁(yè)面(view): Struts 1使用標(biāo)準(zhǔn)JSP機(jī)制把對(duì)象綁定到頁(yè)面中來(lái)訪問(wèn)。 Struts 2 使用 ValueStack技術(shù),使taglib能夠訪問(wèn)值而不需要把你的頁(yè)面(view)和對(duì)

16、象綁定起來(lái)。ValueStack策略允許通過(guò)一系列名稱相同但類型不同的屬性重用頁(yè)面(view)。 類型轉(zhuǎn)換: Struts 1 ActionForm 屬性通常都是String類型。Struts1使用Commons-Beanutils進(jìn)行類型轉(zhuǎn)換。每個(gè)類一個(gè)轉(zhuǎn)換器,對(duì)每一個(gè)實(shí)例來(lái)說(shuō)是不可配置的。 Struts2 使用OGNL進(jìn)行類型轉(zhuǎn)換。提供基本和常用對(duì)象的轉(zhuǎn)換器。 校驗(yàn): Struts 1支持在ActionForm的validate方法中手動(dòng)校驗(yàn),或者通過(guò)Commons Validator的擴(kuò)展來(lái)校驗(yàn)。同一個(gè)類可以有不同的校驗(yàn)內(nèi)容,但不能校驗(yàn)子對(duì)象。 Struts2支持通過(guò)validate方法

17、和XWork校驗(yàn)框架來(lái)進(jìn)行校驗(yàn)。XWork校驗(yàn)框架使用為屬性類類型定義的校驗(yàn)和內(nèi)容校驗(yàn),來(lái)支持chain校驗(yàn)子屬性 Action執(zhí)行的控制: Struts1支持每一個(gè)模塊有單獨(dú)的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。 Struts2支持通過(guò)攔截器堆棧(Interceptor Stacks)為每一個(gè)Action創(chuàng)建不同的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用,Struts2使用方法,在項(xiàng)目中引入核心包 在web.xml中配置核心攔截器 定制Struts.xml 編寫實(shí)例 編寫自定義標(biāo)簽,在項(xiàng)目中引入核心包 此處列舉s

18、truts2運(yùn)行所需的最少jar包,Struts2使用方法,PS:此處不包含擴(kuò)展功能包與同其他框架整合包,如需使用擴(kuò)展功能以及框架整合開發(fā)須再次導(dǎo)入框架整合包,在web.xml中配置核心攔截器,Struts2使用方法, struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* ,定制Struts.xml Struts2默認(rèn)的應(yīng)用級(jí)的主配置文件包含所有應(yīng)用級(jí)別對(duì)框架級(jí)別默認(rèn)行為的覆蓋定義 頂級(jí)標(biāo)簽Struts下可包含以下標(biāo)簽 ,Struts2使用方法,定制Struts.xml Package標(biāo)簽詳解 ,Struts2使用方法,定制Struts.xml Package標(biāo)簽詳解 -繼承自struts-default -配置默認(rèn)action -配置全局異常返回頁(yè)面 /error.jsp -配置全局異常類映射 -配置名為index的action -配置返回結(jié)果為redirectAction(轉(zhuǎn)發(fā)至Action) HelloWorld -配置返回值對(duì)應(yīng)的Acti

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論