版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、這是Struts2官方站點(diǎn)提供的Struts 2 的整體結(jié)構(gòu)。一個(gè)請(qǐng)求在Struts2框架中的處理大概分為以下幾個(gè)步驟1.客戶端提起一個(gè)(HttpServletRequest)請(qǐng)求,如上文在瀏覽器中輸入” HYPERLINK http:/localhost:8080/TestMvc/add.jsp http:/localhost:8080/TestMvc/add.action”就是提起一個(gè)(HttpServletRequest)請(qǐng)求。2.請(qǐng)求被提交到一系列(主要是三層)的過(guò)濾器(Filter),如(ActionContextCleanUp、其他過(guò)濾器(SiteMesh等)、 FilterDis
2、patcher)。注意這里是有順序的,先ActionContextCleanUp,再其他過(guò)濾器(SiteMesh等)、最后到 FilterDispatcher。3.FillterrDisspattcheer是控控制器的的核心,就是mmvc中中c控制層層的核心心。下面面粗略的的分析下下我理解解的FiilteerDiispaatchher工工作流程程和原理理:FiltterDDisppatccherr進(jìn)行初初始化并并啟用核核心dooFillterr其代碼碼如下:pubbliccvoiidddoFiilteer(SServvlettReqquesstrreq,SeervlletRRespponsse
3、rres,FiilteerChhainnchhainn)tthroowsIOEExceeptiion,SeervlletEExceeptiionHtttpSeervlletRRequuesttreequeest=(HtttpSeervlletRRequuestt)rreq;HHttppSerrvleetReespoonseereespoonsee=(HtttpSServvlettRessponnse)rees;SeervlletCConttexttseervlletCConttextt=fillterrConnfigg.geetSeervlletCConttextt();/在在這里處處理了HH
4、ttppSerrvleetReequeest和和HtttpSeervlletRRespponsse。DDisppatccherrUtiilsdu=DDisppatccherrUtiils.gettInsstannce();duu.prrepaare(reqquesst,ressponnse);/正如這這個(gè)方法法名字一一樣進(jìn)行行l(wèi)occalee、enccodiing以以及特殊殊reqquesstpparaametterss設(shè)置tryyreequeest=ddu.wwrappReqquesst(rrequuestt,sservvlettConntexxt);/對(duì)reqquesst進(jìn)行行包裝catt
5、ch(IOOExccepttionne)SStriingmesssagge=CCoulldnnotwraapsservvlettreequeestwitthMMulttipaartRRequuesttWraappeer!;LOOG.eerroor(mmesssagee,ee);tthroownewwSeervlletEExceeptiion(messsagge,e);AcctioonMaappeerIFFmaappeer=AcctioonMaappeerFaactoory.gettMappperr();/得到到acttionn的mappperrAActiionMMapppinggmaappii
6、ng=mmappper.gettMapppinng(rrequuestt);/得得到acctioon的的maappiingiff(mmapppingg=nuull)/ttherreiisnnoaactiioninthiisrrequuestt,sshouuldweloookfforasstatticressourrce?StrringgreesouurceePatth=ReequeestUUtills.ggetSServvlettPatth(rrequuestt);iif(.equualss(reesouurceePatth)&nulll!=rrequuestt.geetPaathIInfoo
7、()ressourrcePPathh=reqquesst.ggetPPathhInffo();iif(trrue.eqqualls(CConffiguurattionn.geet(WWebWWorkkConnstaantss.WEEBWOORK_SERRVE_STAATICC_COONTEENT)&reesouurceePatth.sstarrtsWWithh(/webbworrk)Sttrinngnnamee=ressourrcePPathh.suubsttrinng(/weebwoork.leengtth();finndSttatiicReesouurcee(naame,reespoons
8、ee);ellse/tthississanorrmallreequeest,leetiitppasssthhrouughchaain.doFFiltter(reqquesst,ressponnse);/WWWddiditssjoobhhereeretturnn;OObjeecto=nuull;ttry/settupCConttainner(reqquesst);o=beeforreAcctioonInnvoccatiion(reqquesst,serrvleetCoonteext);/整個(gè)框框架最最最核心的的方法,下面分分析duu.seerviiceAActiion(reqquesst,res
9、sponnse,seervlletCConttextt,mmapppingg);finnalllyaftterAActiionIInvoocattionn(reequeest,seervlletCConttextt,oo);AActiionCConttextt.seetCoonteext(nulll);ddu.sservviceeActtionn(reequeest,reespoonsee,sservvlettConntexxt,mapppinng);/這個(gè)個(gè)方法詢?cè)儐?wèn)AcctioonMaappeer是否否需要調(diào)調(diào)用某個(gè)個(gè)Acttionn來(lái)處理理這個(gè)(reqquesst)請(qǐng)請(qǐng)求,如如果Acct
10、ioonMaappeer決定定需要調(diào)調(diào)用某個(gè)個(gè)Acttionn,F(xiàn)illterrDisspattcheer把請(qǐng)請(qǐng)求的處處理交給給ActtionnProoxyppubllicvoiidsservviceeActtionn(HtttpSServvlettReqquesstrrequuestt,HHttppSerrvleetReespoonseereespoonsee,SStriingnammesppacee,SStriingacttionnNamme,MappreequeestMMap,MaappparaametterMMap,MaapssesssionnMapp,MMapapppliccatii
11、onMMap)HHashhMappexxtraaConntexxt=crreatteCoonteextMMap(reqquesstMaap,parrameeterrMapp,ssesssionnMapp,aappllicaatioonMaap,reqquesst,ressponnse,geetSeervlletCConffig();/實(shí)例例化Maap請(qǐng)求求,詢問(wèn)問(wèn)ActtionnMappperr是否需需要調(diào)用用某個(gè)AActiion來(lái)來(lái)處理這這個(gè)(rrequuestt)請(qǐng)求求eextrraCoonteext.putt(SEERVLLET_DISSPATTCHEER,thiis);OgnnlVaa
12、lueeStaackstaack=(OgnnlVaalueeStaack)reequeest.gettAtttribbutee(SeervlletAActiionCConttextt.WEEBWOORK_VALLUESSTACCK_KKEY);iff(sstacck!=nnulll)exxtraaConntexxt.pput(ActtionnConntexxt.VVALUUE_SSTACCK,nnewOgnnlVaalueeStaack(staack);tryyActtionnProoxyprooxy=AActiionPProxxyFaactoory.gettFacctorry().crrea
13、tteAcctioonPrroxyy(naamesspacce,acttionnNamme,exttraCConttextt);/這里里acttionnNamme是通通過(guò)兩道道gettActtionnNamme解析析出來(lái)的的,FFiltterDDisppatccherr把請(qǐng)求求的處理理交給AActiionPProxxy,下下面是SServvlettDisspattcheer的TOODO:reequeest.settAtttribbutee(SeervlletAActiionCConttextt.WEEBWOORK_VALLUESSTACCK_KKEY,prroxyy.geetInnvoccat
14、iion().ggetSStacck();prooxy.exeecutte();/通過(guò)過(guò)代理模模式執(zhí)行行ActtionnProoxyiif(staack!=nulll)rrequuestt.seetAtttriibutte(SServvlettActtionnConntexxt.WWEBWWORKK_VAALUEESTAACK_KEYY,sttackk);cattch(CoonfiigurratiionEExceeptiione)llog.errror(Cooulddnootffinddacctioon,e);ssenddErrror(reqquesst,ressponnse,HtttpSSe
15、rvvlettRessponnse.SC_NOTT_FOOUNDD,ee);caatchh(EExceeptiione)llog.errror(Cooulddnooteexeccuteeacctioon,e);ssenddErrror(reqquesst,ressponnse,HtttpSServvlettRessponnse.SC_INTTERNNAL_SERRVERR_ERRRORR,ee);4.FillterrDisspattcheer詢問(wèn)問(wèn)ActtionnMappperr是否需需要調(diào)用用某個(gè)AActiion來(lái)來(lái)處理這這個(gè)(rrequuestt)請(qǐng)求求,如果果ActtionnMapppe
16、rr決定需需要調(diào)用用某個(gè)AActiion,F(xiàn)illterrDisspattcheer把請(qǐng)請(qǐng)求的處處理交給給ActtionnProoxy。5.ActtionnProoxy通通過(guò)Coonfiigurratiion Mannageer(strrutss.xmml)詢?cè)儐?wèn)框架架的配置置文件,找到需需要調(diào)用用的Acctioon類(lèi).如上文文的sttrutts.xxml配配置addd.jssp 如如果提交交請(qǐng)求的的是addd.aactiion,那么找找到的AActiion類(lèi)類(lèi)就是eedissunddongg.AdddAcctioon。6.ActtionnProoxy創(chuàng)創(chuàng)建一個(gè)個(gè)ActtionnInvvoca
17、atioon的實(shí)實(shí)例,同同時(shí)AcctioonInnvoccatiion通通過(guò)代理理模式調(diào)調(diào)用Acctioon。但但在調(diào)用用之前AActiionIInvoocattionn會(huì)根據(jù)據(jù)配置加加載Acctioon相關(guān)關(guān)的所有有Intterccepttor。(Innterrcepptorr是sttrutts2另另一個(gè)核核心級(jí)的的概念)下面我們們來(lái)看看看ActtionnInvvocaatioon是如如何工作作的:AActiionIInvoocattionn是Xwoorkss中Acttionn調(diào)度度的核心心。而對(duì)對(duì)Intterccepttor的調(diào)度度,也正正是由AActiionIInvoocattionn負(fù)
18、責(zé)。ActtionnInvvocaatioon是是一個(gè)接接口,而DeffaulltAcctioonInnvoccatiion則是Weebwoork對(duì)ActtionnInvvocaatioon的默默認(rèn)實(shí)現(xiàn)現(xiàn)。Innterrcepptorr的調(diào)調(diào)度流程程大致如如下:11.AActiionIInvoocattionn初始化化時(shí),根根據(jù)配置置,加載載Acttionn相關(guān)的的所有IInteerceeptoor。2.通過(guò)AcctioonInnvoccatiion.invvokee方法調(diào)調(diào)用Acctioon實(shí)現(xiàn)現(xiàn)時(shí),執(zhí)執(zhí)行Innterrcepptorr。Intterccepttor 將很多多功能從從我們的的
19、Acttionn中獨(dú)立立出來(lái),大量減減少了我我們Acctioon的代代碼,獨(dú)獨(dú)立出來(lái)來(lái)的行為為具有很很好的重重用性。XWoork、WebbWorrk的許許多功能能都是有有Intterccepttor實(shí)實(shí)現(xiàn),可可以在配配置文件件中組裝裝Acttionn用到的的Intterccepttor,它會(huì)按按照你指指定的順順序,在在Acttionn執(zhí)行前前后運(yùn)行行。那么么什么是是攔截器器。攔截截器就是是AOPP(Asppectt-OrriennteddPrrogrrammmingg)的一一種實(shí)現(xiàn)現(xiàn)。(AAOP是是指用于于在某個(gè)個(gè)方法或或字段被被訪問(wèn)之之前,進(jìn)進(jìn)行攔截截然后在在之前或或之后加加入某些些操作。)
20、攔截截器的例例子這里里就不展展開(kāi)了。strrutss-deefauult.xmll文件摘摘取的內(nèi)內(nèi)容:7.一旦AActiion執(zhí)執(zhí)行完畢畢,AcctioonInnvoccatiion負(fù)負(fù)責(zé)根據(jù)據(jù)strrutss.xmml中的的配置找找到對(duì)應(yīng)應(yīng)的返回回結(jié)果。如上文文中將結(jié)結(jié)構(gòu)返回回“addd.jjsp”,但大大部分時(shí)時(shí)候都是是返回另另外一個(gè)個(gè)acttionn,那么么流程又又得走一一遍Struuts22/XWWorkk 遠(yuǎn)程程命令執(zhí)執(zhí)行漏洞洞POCC20100-122-044struuts22一種 HYPERLINK /post/tag/java-web o 查看 java-web 的全部文章 j
21、aava-webb的 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MVCC框架技技術(shù),和和傳統(tǒng)的的strrutss1有很很大的改改進(jìn)。struuts22=sttrutts +WebbWorrk。WebbWorrk是由由OpeenSyymphhonyy組織開(kāi)開(kāi)發(fā)的,致力于于組件化化和代碼碼重用的的拉出式式 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MVCC模式J22EE Webb框架。WebbWorrk目前前最新版版本是22.1,現(xiàn)在的的WebbWorrk2.x前身身是Riickaard Obeerg開(kāi)開(kāi)發(fā)的WWebWWork
22、k,但現(xiàn)現(xiàn)在WeebWoork已已經(jīng)被拆拆分成了了Xwoork11和WebbWorrk2兩兩個(gè)項(xiàng)目目。XWWorkk是一個(gè)個(gè)標(biāo)準(zhǔn)的的Commmannd模式實(shí)現(xiàn)現(xiàn),并且且完全從從 weeb層脫脫離出來(lái)來(lái)。Xworrk提供供了很多多核心功功能:前前端攔+截器(intterccepttor),運(yùn)行行時(shí)表單單屬性驗(yàn)驗(yàn)證,類(lèi)類(lèi)型轉(zhuǎn)換換,強(qiáng)大大的表達(dá)達(dá)式語(yǔ)言言(OGGNL tthe Objjectt Grraphh Naaviggatiion Lannguaage),IooC(Invverssionn off Coontrrol倒倒置控制制)容器器等。其其目的是是:創(chuàng)建建一個(gè)泛泛化的、可重用用且可擴(kuò)擴(kuò)展的
23、命命令模式式框架,而不是是一個(gè)特特定在某某個(gè)領(lǐng)域域使用的的框架。XWoork存存在遠(yuǎn)程程命令執(zhí)執(zhí)行 HYPERLINK /post/tag/%e6%bc%8f%e6%b4%9e o 查看 漏洞的全部文章 漏洞洞。+iinfoo:Frridaay, Jully 99, 220100CVEE-20010-18770: HYPERLINK /post/tag/struts2xwork o 查看Struts2/XWork 的全部文章 Strrutss2/XXWorrkremmotee coommaand exeecuttionn+ppoc:Acttuall prrooff off coonceept
24、hadd too usse OOGNLLs exppresssioon eevalluattionn whhen craaftiing HTTTP rrequuestt. PPoC forr thhis bugg wiill be pubblisshedd onn Juuly 12 20110. To tesst wwhettherr yoour apppliccatiion is vullnerrablle yyou cann usse tthe folllowwingg prrooff off coonceept, whhichh wiill calll jjavaa.laang.Runntimme.ggetRRunttimee().exiit(11):httpp:/myddomaain/MySStruuts.acttionn?(u00023_memmberrAcccesssaalloowSttatiicMeethoodAcccesss)(mehh)=ttruee&(aa
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美菜調(diào)度主管述職報(bào)告
- 初中英語(yǔ)教案反思
- 彩色的象教案反思
- 互聯(lián)網(wǎng)的組成說(shuō)課稿
- 和許多小班說(shuō)課稿
- 書(shū)店安全消防施工合同
- 數(shù)碼俱樂(lè)部會(huì)員停車(chē)場(chǎng)地租賃合同
- 珠寶公司配電房安裝協(xié)議
- 精密儀器顧問(wèn)合同
- 交通樞紐供暖設(shè)備安裝合同
- 班組長(zhǎng)競(jìng)選表
- 《鯀禹治水》-完整版PPT
- (完整版)新概念英語(yǔ)第2冊(cè)課文word版
- Q∕SY 05592-2019 油氣管道管體修復(fù)技術(shù)規(guī)范
- 2022年廣東深圳寶安區(qū)寶安中學(xué)八年級(jí)上學(xué)期期中物理試卷
- 報(bào)廢統(tǒng)計(jì)表(標(biāo)準(zhǔn)模版)
- 《愛(ài)的抱抱》 PPTX 課件
- 室外給水消防球墨鑄鐵管施工組織方案
- 燃?xì)夤鹃T(mén)站投產(chǎn)試運(yùn)行方案
- 巖漿巖及變質(zhì)巖
- 肺爆震傷-PPT課件
評(píng)論
0/150
提交評(píng)論