struts2核心工作流程與原理_第1頁
struts2核心工作流程與原理_第2頁
struts2核心工作流程與原理_第3頁
struts2核心工作流程與原理_第4頁
struts2核心工作流程與原理_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、這是Struts2官方站點提供的Struts 2 的整體結構。一個請求在Struts2框架中的處理大概分為以下幾個步驟1.客戶端提起一個(HttpServletRequest)請求,如上文在瀏覽器中輸入” HYPERLINK http:/localhost:8080/TestMvc/add.jsp http:/localhost:8080/TestMvc/add.action”就是提起一個(HttpServletRequest)請求。2.請 求被提提交到一一系列(主主要是三三層)的的過濾器器(Fiilteer),如如(AcctioonCoonteextCCleaanUpp、其他他過濾器器(Si

2、iteMMeshh等)、 FillterrDisspattcheer)。注注意這里里是有順順序的,先先ActtionnConntexxtClleannUp,再再其他過過濾器(SiteMesh等)、最后到 FilterDispatcher。3.FillterrDisspattcheer是控控制器的的核心,就就是mvvc中c控制層層的核心心。下面面粗略的的分析下下我理解解的FiilteerDiispaatchher工工作流程程和原理理:FilteerDiispaatchher進進行初始始化并啟啟用核心心doFFiltter其其代碼如如下:ppubllicvoiidddoFiilteer(SServ

3、vlettReqquesstrreq,SeervlletRRespponsserres,FiilteerChhainnchhainn)tthroowsIOEExceeptiion,SeervlletEExceeptiionHtttpSeervlletRRequuesttreequeest=(HtttpSeervlletRRequuestt)rreq;HHttppSerrvleetReespoonseereespoonsee=(HtttpSServvlettRessponnse)rees;SeervlletCConttexttseervlletCConttextt=fillterrConnfig

4、g.geetSeervlletCConttextt();/在在這里處處理了HHttppSerrvleetReequeest和和HtttpSeervlletRRespponsse。DDisppatccherrUtiilsdu=DDisppatccherrUtiils.gettInsstannce();duu.prrepaare(reqquesst,ressponnse);/正如這這個方法法名字一一樣進行行l(wèi)occalee、enccodiing以以及特殊殊reqquesstpparaametterss設置tryyreequeest=ddu.wwrappReqquesst(rrequuestt,ss

5、ervvlettConntexxt);/對reqquesst進行行包裝cattch(IOOExccepttionne)SStriingmesssagge=CCoulldnnotwraapsservvlettreequeestwitthMMulttipaartRRequuesttWraappeer!;LOOG.eerroor(mmesssagee,ee);tthroownewwSeervlletEExceeptiion(messsagge,e);AcctioonMaappeerIFFmaappeer=AcctioonMaappeerFaactoory.gettMappperr();/得到到act

6、tionn的mappperrAActiionMMapppinggmaappiing=mmappper.gettMapppinng(rrequuestt);/得得到acctioon的的maappiingiff(mmapppingg=nuull)/ttherreiisnnoaactiioninthiisrrequuestt,sshouuldweloookfforasstatticressourrce?StrringgreesouurceePatth=ReequeestUUtills.ggetSServvlettPatth(rrequuestt);iif(.equualss(reesouurceeP

7、atth)&nulll!=rrequuestt.geetPaathIInfoo()ressourrcePPathh=reqquesst.ggetPPathhInffo();iif(trrue.eqqualls(CConffiguurattionn.geet(WWebWWorkkConnstaantss.WEEBWOORK_SERRVE_STAATICC_COONTEENT)&reesouurceePatth.sstarrtsWWithh(/webbworrk)Sttrinngnnamee=ressourrcePPathh.suubsttrinng(/weebwoork.leengtth();f

8、inndSttatiicReesouurcee(naame,reespoonsee);ellse/tthississanorrmallreequeest,leetiitppasssthhrouughchaain.doFFiltter(reqquesst,ressponnse);/WWWddiditssjoobhhereeretturnn;OObjeecto=nuull;ttry/settupCConttainner(reqquesst);o=beeforreAcctioonInnvoccatiion(reqquesst,serrvleetCoonteext);/整個框框架最最最核心的的方法,下

9、下面分析析du.serrvicceAcctioon(rrequuestt,rrespponsse,serrvleetCoonteext,maappiing);ffinaallyyaffterrActtionnInvvocaatioon(rrequuestt,sservvlettConntexxt,o);ActtionnConntexxt.ssetCConttextt(nuull);du.serrvicceAcctioon(rrequuestt,rrespponsse,serrvleetCoonteext,maappiing);/這個方方法詢問問ActtionnMappperr是否需需要調用用某

10、個AActiion來來處理這這個(rrequuestt)請求求,如果果ActtionnMappperr決定需需要調用用某個AActiion,FillterrDisspattcheer把請請求的處處理交給給ActtionnProoxyppubllicvoiidsservviceeActtionn(HtttpSServvlettReqquesstrrequuestt,HHttppSerrvleetReespoonseereespoonsee,SStriingnammesppacee,SStriingacttionnNamme,MappreequeestMMap,MaappparaametterMM

11、ap,MaapssesssionnMapp,MMapapppliccatiionMMap)HHashhMappexxtraaConntexxt=crreatteCoonteextMMap(reqquesstMaap,parrameeterrMapp,ssesssionnMapp,aappllicaatioonMaap,reqquesst,ressponnse,geetSeervlletCConffig();/實例例化Maap請求求,詢問問ActtionnMappperr是否需需要調用用某個AActiion來來處理這這個(rrequuestt)請求求eextrraCoonteext.putt(S

12、EERVLLET_DISSPATTCHEER,thiis);OgnnlVaalueeStaackstaack=(OgnnlVaalueeStaack)reequeest.gettAtttribbutee(SeervlletAActiionCConttextt.WEEBWOORK_VALLUESSTACCK_KKEY);iff(sstacck!=nnulll)exxtraaConntexxt.pput(ActtionnConntexxt.VVALUUE_SSTACCK,nnewOgnnlVaalueeStaack(staack);tryyActtionnProoxyprooxy=AActiion

13、PProxxyFaactoory.gettFacctorry().crreatteAcctioonPrroxyy(naamesspacce,acttionnNamme,exttraCConttextt);/這里里acttionnNamme是通通過兩道道gettActtionnNamme解析析出來的的,FFiltterDDisppatccherr把請求求的處理理交給AActiionPProxxy,下下面是SServvlettDisspattcheer的TOODO:reequeest.settAtttribbutee(SeervlletAActiionCConttextt.WEEBWOORK_VA

14、LLUESSTACCK_KKEY,prroxyy.geetInnvoccatiion().ggetSStacck();prooxy.exeecutte();/通過過代理模模式執(zhí)行行ActtionnProoxyiif(staack!=nulll)rrequuestt.seetAtttriibutte(SServvlettActtionnConntexxt.WWEBWWORKK_VAALUEESTAACK_KEYY,sttackk);cattch(CoonfiigurratiionEExceeptiione)llog.errror(Cooulddnootffinddacctioon,e);ssen

15、ddErrror(reqquesst,ressponnse,HtttpSServvlettRessponnse.SC_NOTT_FOOUNDD,ee);caatchh(EExceeptiione)llog.errror(Cooulddnooteexeccuteeacctioon,e);ssenddErrror(reqquesst,ressponnse,HtttpSServvlettRessponnse.SC_INTTERNNAL_SERRVERR_ERRRORR,ee);4.FillterrDisspattcheer詢問問ActtionnMappperr是否需需要調用用某個AActiion來來

16、處理這這個(rrequuestt)請求求,如果果ActtionnMappperr決定需需要調用用某個AActiion,FillterrDisspattcheer把請請求的處處理交給給ActtionnProoxy。5.ActtionnProoxy通通過Coonfiigurratiion Mannageer(strrutss.xmml)詢詢問框架架的配置置文件,找找到需要要調用的的Acttionn類.如上文文的sttrutts.xxml配配置addd.jssp 如果果提交請請求的是是addd.acctioon,那那么找到到的Acctioon類就就是eddisuundoong.AdddActtion

17、n。6.ActtionnProoxy創(chuàng)創(chuàng)建一個個ActtionnInvvocaatioon的實實例,同同時AcctioonInnvoccatiion通通過代理理模式調調用Acctioon。但但在調用用之前AActiionIInvoocattionn會根據據配置加加載Acctioon相關關的所有有Intterccepttor。(Interceptor是struts2另一個核心級的概念)下面我們來來看看AActiionIInvoocattionn是如何何工作的的:AcctioonInnvoccatiion是Xwoorkss中Acttionn調度度的核心心。而對對Intterccepttor的調度度

18、,也正正是由AActiionIInvoocattionn負責。AActiionIInvoocattionn是一一個接口口,而DeffaulltAcctioonInnvoccatiion則是Weebwoork對ActtionnInvvocaatioon的默默認實現現。Innterrcepptorr的調調度流程程大致如如下:11.AActiionIInvoocattionn初始化化時,根根據配置置,加載載Acttionn相關的的所有IInteerceeptoor。2.通過AcctioonInnvoccatiion.invvokee方法調調用Acctioon實現現時,執(zhí)執(zhí)行Innterrceppto

19、rr。Intterccepttor 將很多多功能從從我們的的Acttionn中獨立立出來,大大量減少少了我們們Acttionn的代碼碼,獨立立出來的的行為具具有很好好的重用用性。XXWorrk、WebbWorrk的許許多功能能 都是有有Intterccepttor實實現,可可以在配配置文件件中組裝裝Acttionn用到的的Intterccepttor,它它會按照照你指定定的順序序,在AActiion執(zhí)執(zhí)行前后后運 行。那么么什么是是攔截器器。攔截截器就是是AOPP(Asppectt-OrriennteddPrrogrrammmingg)的一一種實現現。(AAOP是是指用于于在某個個方法或或字段

20、被被訪問之之前,進進行攔截截然后在在之前或或之后加加入某些些操作。)攔截器的例子這里就不展開了。struts-default.xml文件摘取的內容:7.一旦AActiion執(zhí)執(zhí)行完畢畢,AcctioonInnvoccatiion負負責根據據strrutss.xmml中的的配置找找到對應應的返回回結果。如如上文中中將結構構返回“aadd.jspp”,但但大部分分時候都都是返回回另外一一個acctioon,那那么流程程又得走走一遍Strutts2/XWoork 遠程命命令執(zhí)行行漏洞PPOC2010-12-04strutts2一一種 HYPERLINK /post/tag/java-web o 查看

21、 java-web 的全部文章 jaava-webb的 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MVCC框架技技術,和和傳統的的strrutss1有很很大的改改進。strutts2=strrutss +WWebWWorkk。WebbWorrk是由由OpeenSyymphhonyy組織開開發(fā)的,致致力于組組件化和和代碼重重用的拉拉出式 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MMVC模模式J22EE Webb框架。WWebWWorkk目前最最新版本本是2.1,現現在的WWebWWorkk2.xx前身是是Ricckarrd

22、 OOberrg開發(fā)發(fā)的WeebWoork,但但現在WWebWWorkk已經被被拆分成成了Xwworkk1和WebbWorrk2兩兩個項目目。XWWorkk是一個個標準的的Commmannd模 式實現現,并且且完全從從 weeb層脫脫離出來來。Xworkk提供了了很多核核心功能能:前端端攔+截器(iinteerceeptoor),運運行時表表單屬性性驗證,類類型轉換換,強大大的表達達式語言言(OGGNL tthe Objjectt Grraphh Naaviggatiion Lannguaage),IooC(Invverssionn off Coontrrol倒倒置控制制)容器器等。其其目的是

23、是:創(chuàng)建建一個泛泛化的、可可重用且且可擴展展的命令令模式框框架,而而不是一一個特定定在某個個領域使使用的框框架。XXWorrk存在在遠程命命 令執(zhí)行行 HYPERLINK /post/tag/%e6%bc%8f%e6%b4%9e o 查看 漏洞的全部文章 漏洞。+innfo:Friidayy, JJulyy 9, 20010CCVE-20110-118700: HYPERLINK /post/tag/struts2xwork o 查看Struts2/XWork 的全部文章 Strrutss2/XXWorrkremmotee coommaand exeecuttionn+pooc:AActuua

24、l prooof of connceppt hhad to usee OGGNLs eexprresssionn evvaluuatiion wheen ccrafftinng HHTTPP reequeest. PooC ffor thiis bbug willl bbe ppubllishhed on Jully 112 220100. TTo ttestt whhethher youur aappllicaatioon iis vvulnneraablee yoou ccan usee thhe ffolllowiing prooof of connceppt, whiich willl ccalll jaava.lanng.RRunttimee.geetRuuntiime().eexitt(1):http:/mmydoomaiin/MMySttrutts.aactiion?(uu00223_mmembberAAcceessalllowwStaaticcMetthoddAcccesss)(mmeh)=trrue&(aa

溫馨提示

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

評論

0/150

提交評論