




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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) 求被提提交到一一系列(主主要是三三層)的的過濾器器(Fiilteer),如如(AcctioonCoonteextCCleaanUpp、其他他過濾器器(Si
2、iteMMeshh等)、 FillterrDisspattcheer)。注注意這里里是有順順序的,先先ActtionnConntexxtClleannUp,再再其他過過濾器(SiteMesh等)、最后到 FilterDispatcher。3.FillterrDisspattcheer是控控制器的的核心,就就是mvvc中c控制層層的核心心。下面面粗略的的分析下下我理解解的FiilteerDiispaatchher工工作流程程和原理理:FilteerDiispaatchher進(jìn)進(jìn)行初始始化并啟啟用核心心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);/正如這這個(gè)方法法名字一一樣進(jìn)行行l(wèi)occalee、enccodiing以以及特殊殊reqquesstpparaametterss設(shè)置tryyreequeest=ddu.wwrappReqquesst(rrequuestt,ss
5、ervvlettConntexxt);/對(duì)reqquesst進(jìn)行行包裝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);/整個(gè)框框架最最最核心的的方法,下
9、下面分析析du.serrvicceAcctioon(rrequuestt,rrespponsse,serrvleetCoonteext,maappiing);ffinaallyyaffterrActtionnInvvocaatioon(rrequuestt,sservvlettConntexxt,o);ActtionnConntexxt.ssetCConttextt(nuull);du.serrvicceAcctioon(rrequuestt,rrespponsse,serrvleetCoonteext,maappiing);/這個(gè)方方法詢問問ActtionnMappperr是否需需要調(diào)用用某
10、個(gè)AActiion來來處理這這個(gè)(rrequuestt)請(qǐng)求求,如果果ActtionnMappperr決定需需要調(diào)用用某個(gè)AActiion,F(xiàn)illterrDisspattcheer把請(qǐng)請(qǐng)求的處處理交給給ActtionnProoxyppubllicvoiidsservviceeActtionn(HtttpSServvlettReqquesstrrequuestt,HHttppSerrvleetReespoonseereespoonsee,SStriingnammesppacee,SStriingacttionnNamme,MappreequeestMMap,MaappparaametterMM
11、ap,MaapssesssionnMapp,MMapapppliccatiionMMap)HHashhMappexxtraaConntexxt=crreatteCoonteextMMap(reqquesstMaap,parrameeterrMapp,ssesssionnMapp,aappllicaatioonMaap,reqquesst,ressponnse,geetSeervlletCConffig();/實(shí)例例化Maap請(qǐng)求求,詢問問ActtionnMappperr是否需需要調(diào)用用某個(gè)AActiion來來處理這這個(gè)(rrequuestt)請(qǐng)求求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把請(qǐng)求求的處理理交給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是否需需要調(diào)用用某個(gè)AActiion來來
16、處理這這個(gè)(rrequuestt)請(qǐng)求求,如果果ActtionnMappperr決定需需要調(diào)用用某個(gè)AActiion,F(xiàn)illterrDisspattcheer把請(qǐng)請(qǐng)求的處處理交給給ActtionnProoxy。5.ActtionnProoxy通通過Coonfiigurratiion Mannageer(strrutss.xmml)詢?cè)儐柨蚣芗艿呐渲弥梦募?,找找到需要要調(diào)用的的Acttionn類.如上文文的sttrutts.xxml配配置addd.jssp 如果果提交請(qǐng)請(qǐng)求的是是addd.acctioon,那那么找到到的Acctioon類就就是eddisuundoong.AdddActtion
17、n。6.ActtionnProoxy創(chuàng)創(chuàng)建一個(gè)個(gè)ActtionnInvvocaatioon的實(shí)實(shí)例,同同時(shí)AcctioonInnvoccatiion通通過代理理模式調(diào)調(diào)用Acctioon。但但在調(diào)用用之前AActiionIInvoocattionn會(huì)根據(jù)據(jù)配置加加載Acctioon相關(guān)關(guān)的所有有Intterccepttor。(Interceptor是struts2另一個(gè)核心級(jí)的概念)下面我們來來看看AActiionIInvoocattionn是如何何工作的的:AcctioonInnvoccatiion是Xwoorkss中Acttionn調(diào)度度的核心心。而對(duì)對(duì)Intterccepttor的調(diào)度度
18、,也正正是由AActiionIInvoocattionn負(fù)責(zé)。AActiionIInvoocattionn是一一個(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.通過AcctioonInnvoccatiion.invvokee方法調(diào)調(diào)用Acctioon實(shí)現(xiàn)現(xiàn)時(shí),執(zhí)執(zhí)行Innterrceppto
19、rr。Intterccepttor 將很多多功能從從我們的的Acttionn中獨(dú)立立出來,大大量減少少了我們們Acttionn的代碼碼,獨(dú)立立出來的的行為具具有很好好的重用用性。XXWorrk、WebbWorrk的許許多功能能 都是有有Intterccepttor實(shí)實(shí)現(xiàn),可可以在配配置文件件中組裝裝Acttionn用到的的Intterccepttor,它它會(huì)按照照你指定定的順序序,在AActiion執(zhí)執(zhí)行前后后運(yùn) 行。那么么什么是是攔截器器。攔截截器就是是AOPP(Asppectt-OrriennteddPrrogrrammmingg)的一一種實(shí)現(xiàn)現(xiàn)。(AAOP是是指用于于在某個(gè)個(gè)方法或或字段
20、被被訪問之之前,進(jìn)進(jìn)行攔截截然后在在之前或或之后加加入某些些操作。)攔截器的例子這里就不展開了。struts-default.xml文件摘取的內(nèi)容:7.一旦AActiion執(zhí)執(zhí)行完畢畢,AcctioonInnvoccatiion負(fù)負(fù)責(zé)根據(jù)據(jù)strrutss.xmml中的的配置找找到對(duì)應(yīng)應(yīng)的返回回結(jié)果。如如上文中中將結(jié)構(gòu)構(gòu)返回“aadd.jspp”,但但大部分分時(shí)候都都是返回回另外一一個(gè)acctioon,那那么流程程又得走走一遍Strutts2/XWoork 遠(yuǎn)程命命令執(zhí)行行漏洞PPOC2010-12-04strutts2一一種 HYPERLINK /post/tag/java-web o 查看
21、 java-web 的全部文章 jaava-webb的 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MVCC框架技技術(shù),和和傳統(tǒng)的的strrutss1有很很大的改改進(jìn)。strutts2=strrutss +WWebWWorkk。WebbWorrk是由由OpeenSyymphhonyy組織開開發(fā)的,致致力于組組件化和和代碼重重用的拉拉出式 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MMVC模模式J22EE Webb框架。WWebWWorkk目前最最新版本本是2.1,現(xiàn)現(xiàn)在的WWebWWorkk2.xx前身是是Ricckarrd
22、 OOberrg開發(fā)發(fā)的WeebWoork,但但現(xiàn)在WWebWWorkk已經(jīng)被被拆分成成了Xwworkk1和WebbWorrk2兩兩個(gè)項(xiàng)目目。XWWorkk是一個(gè)個(gè)標(biāo)準(zhǔn)的的Commmannd模 式實(shí)現(xiàn)現(xiàn),并且且完全從從 weeb層脫脫離出來來。Xworkk提供了了很多核核心功能能:前端端攔+截器(iinteerceeptoor),運(yùn)運(yùn)行時(shí)表表單屬性性驗(yàn)證,類類型轉(zhuǎn)換換,強(qiáng)大大的表達(dá)達(dá)式語言言(OGGNL tthe Objjectt Grraphh Naaviggatiion Lannguaage),IooC(Invverssionn off Coontrrol倒倒置控制制)容器器等。其其目的是
23、是:創(chuàng)建建一個(gè)泛泛化的、可可重用且且可擴(kuò)展展的命令令模式框框架,而而不是一一個(gè)特定定在某個(gè)個(gè)領(lǐng)域使使用的框框架。XXWorrk存在在遠(yuǎn)程命命 令執(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力工程質(zhì)量控制服務(wù)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025年醇酸磁漆合作協(xié)議書
- xx鄉(xiāng)衛(wèi)生院消防安全管理制度
- 醫(yī)療健康管理服務(wù)合同(2篇)
- 兒童權(quán)益保障體系構(gòu)建-全面剖析
- 非營(yíng)利組織溝通策略心得體會(huì)
- 新課標(biāo)下小學(xué)語文差異化教學(xué)心得體會(huì)
- 湘教版一年級(jí)下冊(cè)美術(shù)教學(xué)計(jì)劃的國(guó)際比較
- 買麻藤產(chǎn)業(yè)鏈構(gòu)建-全面剖析
- 婦產(chǎn)科護(hù)理專項(xiàng)培訓(xùn)計(jì)劃
- 電力建設(shè)工程施工安全管理導(dǎo)則
- JTG-QB-003-2003公路橋涵標(biāo)準(zhǔn)圖鋼筋混凝土蓋板涵
- LY/T 1821-2009林業(yè)地圖圖式
- GB_T 229-2020 金屬材料夏比擺錘沖擊試驗(yàn)方法
- 施工組織設(shè)計(jì)雙代號(hào)時(shí)標(biāo)網(wǎng)絡(luò)圖
- 財(cái)政部金融企業(yè)不良資產(chǎn)批量轉(zhuǎn)讓管理辦法(財(cái)金[2012]6號(hào))
- 農(nóng)產(chǎn)品增值稅進(jìn)項(xiàng)稅額核定扣除的會(huì)計(jì)處理-文檔資料
- 《公共財(cái)政學(xué)》PPT課件.ppt
- 技術(shù)負(fù)責(zé)人考核標(biāo)準(zhǔn)
- 截石位的擺放及注意事項(xiàng)
- 數(shù)獨(dú)骨灰級(jí)100題
評(píng)論
0/150
提交評(píng)論