




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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);/正如这这个方法法名字一一样进行行loccalee、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();/通过过代理模模式执行行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创创建一个个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实现现时,执执行Innterrceppto
19、rr。Intterccepttor 将很多多功能从从我们的的Acttionn中独立立出来,大大量减少少了我们们Acttionn的代码码,独立立出来的的行为具具有很好好的重用用性。XXWorrk、WebbWorrk的许许多功能能 都是有有Intterccepttor实实现,可可以在配配置文件件中组装装Acttionn用到的的Intterccepttor,它它会按照照你指定定的顺序序,在AActiion执执行前后后运 行。那么么什么是是拦截器器。拦截截器就是是AOPP(Asppectt-OrriennteddPrrogrrammmingg)的一一种实现现。(AAOP是是指用于于在某个个方法或或字段
20、被被访问之之前,进进行拦截截然后在在之前或或之后加加入某些些操作。)拦截器的例子这里就不展开了。struts-default.xml文件摘取的内容:7.一旦AActiion执执行完毕毕,AcctioonInnvoccatiion负负责根据据strrutss.xmml中的的配置找找到对应应的返回回结果。如如上文中中将结构构返回“aadd.jspp”,但但大部分分时候都都是返回回另外一一个acctioon,那那么流程程又得走走一遍Strutts2/XWoork 远程命命令执行行漏洞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组织开开发的,致致力于组组件化和和代码重重用的拉拉出式 HYPERLINK /post/tag/mvc o 查看 MVC 的全部文章 MMVC模模式J22EE Webb框架。WWebWWorkk目前最最新版本本是2.1,现现在的WWebWWorkk2.xx前身是是Ricckarrd
22、 OOberrg开发发的WeebWoork,但但现在WWebWWorkk已经被被拆分成成了Xwworkk1和WebbWorrk2两两个项目目。XWWorkk是一个个标准的的Commmannd模 式实现现,并且且完全从从 weeb层脱脱离出来来。Xworkk提供了了很多核核心功能能:前端端拦+截器(iinteerceeptoor),运运行时表表单属性性验证,类类型转换换,强大大的表达达式语言言(OGGNL tthe Objjectt Grraphh Naaviggatiion Lannguaage),IooC(Invverssionn off Coontrrol倒倒置控制制)容器器等。其其目的是
23、是:创建建一个泛泛化的、可可重用且且可扩展展的命令令模式框框架,而而不是一一个特定定在某个个领域使使用的框框架。XXWorrk存在在远程命命 令执行行 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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南工学院《数据传输技术基础硬件设计方向》2023-2024学年第二学期期末试卷
- 2025年保安证真题汇编及答案
- 三亚理工职业学院《中外纪录片赏析》2023-2024学年第二学期期末试卷
- 郑州轻工业大学《文学翻译》2023-2024学年第二学期期末试卷
- 山西信息职业技术学院《钢铁冶金概论》2023-2024学年第二学期期末试卷
- 河北农业大学《中国古代史名著选读》2023-2024学年第二学期期末试卷
- 2025保安证考试备考经验谈试题及答案
- 南昌应用技术师范学院《园林植物造景实验》2023-2024学年第一学期期末试卷
- 福建师范大学协和学院《大学体育Ⅱ羽毛球》2023-2024学年第一学期期末试卷
- 2025年化学知识的试题及答案
- 医疗安全(不良)事件报告制度培训课件
- 电力建设工程施工安全管理导则
- 2024年信息技术基础考试复习题库(含答案)
- JTG-QB-003-2003公路桥涵标准图钢筋混凝土盖板涵
- 企业微信指导手册管理员版
- 消防设计专篇
- 截石位的摆放及注意事项
- 甘姜苓术汤_金匮卷中_减法方剂树
- 国家标准色卡电子版
- 《尾矿库基本知识》
- PDS操作说明总结
评论
0/150
提交评论