国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Struts2請求處理流程及源碼分析

開發 后端
根據Web.xml配置,請求首先經過ActionContextCleanUp過濾器,其為可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助(SiteMesh Plugin),主要清理當前線程的ActionContext和Dispatcher;

1.1 Struts2請求處理

1. 一個請求在Struts2框架中的處理步驟:

a) 客戶端初始化一個指向Servlet容器的請求;

b) 根據Web.xml配置,請求首先經過ActionContextCleanUp過濾器,其為可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助(SiteMesh Plugin),主要清理當前線程的ActionContext和Dispatcher;

c) 請求經過插件過濾器,如:SiteMesh、etc等過濾器;

d) 請求經過核心過濾器FilterDispatcher,執行doFilter方法,在該方法中,詢問ActionMapper來決定這個請求是否需要調用某個Action;

e) 如果ActionMapper決定需要調用某個Action,則ActionMapper會返回一個ActionMapping實例(存儲Action的配置信息),并創建ActionProxy(Action代理)對象,將請求交給代理對象繼續處理;

f) ActionProxy對象根據ActionMapping和Configuration Manager詢問框架的配置文件,找到需要調用的Action類;

g) ActionProxy對象創建時,會同時創建一個ActionInvocation的實例;

h) ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用;

i) 一旦Action執行完畢,ActionInvocation實例負責根據struts.xml中的配置創建并返回Result。Result通常是一個需要被表示的JSP或者FreeMarker的模版,也可能是另外的一個Action鏈;

j) 如果要在返回Result之前做些什么,可以實現PreResultListener接口,PreResultListener可以在Interceptor中實現,也可以在Action中實現;

k) 根據Result對象信息,生成用戶響應信息response,在生成響應過程中可以使用Struts2 框架中繼承的標簽,在此過程中仍會再次涉及到ActionMapper;

2. Struts2請求處理示意圖:

clip_image002

1.2 Struts2請求處理源碼分析

當用戶向Struts2發送請求時,FilterDispatcher的doFilter()方法自動調用,doFilter()方法處理請求過程,如下:

1. 創建值棧對象stack;

2. 創建Action上下文對象;

3. 對請求進行重新封裝,此次封裝根據請求內容的類型不同,返回不同的對象:

如果為multipart/form-data類型,則返回MultiPartRequestWrapper類型的對象,該對象服務于文件上傳,否則返回StrutsRequestWrapper類型的對象,MultiPartRequestWrapper是StrutsRequestWrapper的子類,而這兩個類都是HttpServletRequest接口的實現。

4. 通過actionMapper.getMapping()獲得ActionMapping對象,Action的配置信息存儲在ActionMapping對象中(Action的配置信息:Action的name、namespace和要調用的方法method)。相關代碼如下圖所示:

clip_image004

以上代碼,活動圖如下:

clip_image006

5. 如果getMapping()方法返回ActionMapping對象為null,則FilterDispatcher認為用戶請求不是Action,此時FilterDispatcher會首先分析:

如果請求以/struts開頭,會自動查找在web.xml文件中配置的packages初始化參數,FilterDispatcher會將packages參數值包下的文件當作靜態資源處理,即直接在頁面上顯示文件內容。

如果用戶請求的資源不是以/struts開頭—可能是.jsp文件,也可能是.html文件,則通過過濾器鏈繼續往下傳送,直到到達請求的資源為止。

6. 如果getMapping()方法返回有效的ActionMapping對象,則被認為正在請求某個Action,將調用Dispatcher.serviceAction(request, response, servletContext, mapping)方法。

以上六步,相關代碼如下圖所示:

clip_image008

clip_image010

以上代碼,活動圖如下:

clip_image012

7. 請求進入dispatcher.serviceAction(request,response,servletContext,mapping)方法中:

a) 將相關對象信息封裝為Map(如:HttpServletRequest、Http parameters、HttpServletResponse、HttpSession、ServletContext、ActionMapping等對象信息),并存入到執行上下文Map中,返回執行上下文Map對象extraMap;

b) 獲取mapping對象中存儲的action命名空間、name屬性、method屬性等信息;

c) 加載并解析Struts2配置文件,如果沒有人為配置,默認按順序加載struts-default.xml、struts-plugin.xml、struts.xml,將action配置、result配置、interceptor配置,解析并存入至config對象中,返回文件配置對象config;

d) 根據執行上下文Map、action命名空間、name屬性、method屬性等創建用戶Action的代理對象;

e) 執行Action代理對象proxy.execute()方法,并轉向結果;

以上步驟相關代碼,如圖所示:

clip_image014

8. 執行Action代理對象proxy.execute()方法,該方法的執行,其實就是調用了invocation.invoke()方法,如下圖所示:

clip_image016

9. 執行invocation.invoke()方法,實現了截攔器的遞歸調用和執行Action的execute()方法,DefaultActionInvocation.invoke()方法中代碼,如下圖所示:

clip_image018

在以上代碼中,并未看出攔截器的遞歸調用,其實是否遞歸調用,是由程序員來控制的,遞歸調用實現很簡單:

a) 首先看下Interceptor接口定義:

clip_image020

b) 所有的截攔器必須實現intercept方法,而該方法的參數恰恰又是ActionInvocation,所以如果在intercept方法中調用invocation.invoke(),則會繼續從Action的Intercepor列表中找到下一個截攔器執行,依此遞歸調用Intercepor;

Struts2中的日志攔截器LoggingInterceptor,如下圖所示:

clip_image022

c) 攔截器遞歸調用活動圖,如下所示:

clip_image024

10. 在invocation.invoke()方法中,執行攔截器、action并獲得resultCode完畢后,則會繼續執行PreResultListener集合,并生成Result對象,實現PreResultListener接口,可在返回Result之前,做些自定義處理,如圖所示

clip_image026

在返回Result之前,通過PreResultListener實現自定義處理,常用的有兩種方式:一種在Interceptor中實現,一種在Action實現,如圖所示:

clip_image028

clip_image030

以上兩種方式,大家可以發現都是通過匿名內部類的方式實現,其實還有一種方式就是通過在攔截器中實現PreResultListener接口,并實現方法beforeResult方法,即可。如下圖所示:

clip_image032

11. ***,通過生成Result完成用戶響應;

以上1-11步,為Struts2處理請求的完整流程分析,其相關代碼調用流程,如下圖所示:

clip_image034

 

原文鏈接:http://my.oschina.net/xianggao/blog/75514

【編輯推薦】

  1. Struts2漏洞瘋狂來襲 WEB安全危機四伏
  2. Marvin 1.4.0發布 Java圖像處理框架
  3. JavaScript提升網頁加載速度
  4. Java程序員集合框架面試題
  5. Aspose.BarCode for Java 4.5.0發布
責任編輯:張偉 來源: 爪哇王子的博客
相關推薦

2009-06-05 10:43:29

struts2 checheckbox實例

2013-07-19 09:36:04

struts2struts2漏洞

2013-07-18 15:09:27

2012-04-25 10:14:40

JavaStruts

2009-06-05 10:48:01

struts2 ite功能

2009-07-29 09:54:34

struts2和str

2009-06-05 09:58:20

struts2驗證用戶注冊

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-06-08 16:44:00

struts2 ogn

2009-06-04 07:47:54

Struts 2權威指源碼

2009-02-04 10:51:07

2009-02-04 11:00:44

2012-12-18 16:18:06

2009-07-03 09:35:57

Struts2 JSP

2017-07-11 09:42:22

漏洞

2009-06-04 08:34:24

Struts2配置struts.xml

2009-06-25 15:22:03

Struts2教程一個form多個sub

2011-08-19 13:13:14

struts2Java

2012-05-10 14:00:06

StrutsjsonJava

2009-06-25 15:26:25

Struts2教程struts.xml常
點贊
收藏

51CTO技術棧公眾號

四虎国产成人永久精品免费| 免费在线观看麻豆视频| 精品国产91乱码一区二区三区四区 | 久久免费大视频| 欧美日韩精品一区二区天天拍小说 | 一区国产精品视频| 日本五码在线| 亚洲人123区| 99爱视频在线| 99久久免费国产| 欧美影院在线播放| 欧美一区二区国产| 88国产精品视频一区二区三区| 特黄毛片在线观看| 亚洲制服丝袜一区| 嫩模私拍啪啪| 亚洲一区二区精品3399| 国内福利写真片视频在线| 亚洲国产你懂的| 污视频在线观看网站| 亚瑟在线精品视频| 酒色婷婷桃色成人免费av网| 香蕉成人伊视频在线观看| 日本成人一区| 欧美大片国产精品| 国产成人精品一区二区三区视频| 久久久精品视频在线观看| 精品三区视频| 欧美精品欧美精品系列| 一区二区三区四区不卡| 91亚洲无吗| 欧美中文字幕一区| 成人爽a毛片免费啪啪| 亚洲男人都懂的| 超碰97人人射妻| av中文字幕亚洲| 精品国产av无码一区二区三区| 国产麻豆欧美日韩一区| 国产精品一色哟哟| 国产片一区二区| 在线视频网站| 欧美天天综合网| 久色国产在线| 中文欧美在线视频| 国产图片一区| 日本国产精品视频| 久久99精品久久久| 成人自拍网站| 91精品网站| 日韩欧美视频| 国产富婆一区二区三区| 一区二区视频欧美| 亚洲精品国产精品国自产观看| 国产一区二三区好的| www国产精品内射老熟女| 国产日本欧美一区二区| 亚洲人成77777男人| 欧美日韩国产bt| 性感女国产在线| 欧美刺激性大交免费视频| 男男gay无套免费视频欧美 | 欧美大片在线看| 精品一区二区三区在线| ts人妖另类在线| 韩国欧美一区二区| 少妇一级淫免费播放| 亚洲一区二区av在线| 免费在线看黄色| 亚洲天堂av图片| 国产一区二区三区探花| 欧美一区亚洲二区| 国产三级三级三级精品8ⅰ区| 在线免费视频福利| 亚洲码在线观看| 美女久久99| 先锋影音一区二区三区| 久久精品亚洲一区二区三区浴池| 中文字幕在线资源| 亚洲激情自拍图| 欧美精品国产白浆久久久久| 狠狠久久综合婷婷不卡| 91免费精品国自产拍在线不卡| 男生女生差差差的视频在线观看| 亚洲免费一级电影| 欧美精品三区| 色哟哟精品视频| 3d成人h动漫网站入口| 青草久久视频| 欧美性受xxxx黑人猛交88| 亚洲成人资源网| 日本午夜免费一区二区| 91青青草免费观看| 国产亚洲婷婷免费| 青春草视频在线| 国产在线久久久| 丁香婷婷综合五月| 国产鲁鲁视频在线观看特色| 色综合男人天堂| 日韩av在线播放中文字幕| 在线免费福利| 欧美高清视频免费观看| 日本美女一区二区| 欧美日韩性视频| 全国精品免费看| 欧美韩国日本在线| 亚洲第一网站男人都懂| 久久资源综合| 色一情一乱一伦一区二区三区丨| 欧美日韩日本国产亚洲在线| 欧美精品成人一区二区在线观看 | 国产精品一区二区三区美女| 欧美一区少妇| 欧美性猛交xxxxxxxx| 色视频在线播放| 国产香蕉久久精品综合网| 欧美一级电影久久| 中文字幕一区视频| 综合久久2o19| 久久精品ww人人做人人爽| 中文无码久久精品| 日本999视频| 亚洲欧美国产日韩天堂区| 91久久久久| 亚洲国产资源| 4438全国成人免费| 国产亚洲美州欧州综合国| 韩国成人在线| av日韩在线看| 亚洲国产小视频在线观看| 国产欧美丝祙| 伊人免费在线| 国产精品日韩一区二区免费视频| 亚洲综合无码一区二区| 久久99国产精品久久99大师| 亚洲熟妇av日韩熟妇在线| 国产精品欧美激情在线观看| 日韩影院免费视频| 老司机99精品99| 欧美国产一二三区| 欧美一级淫片007| 久久青草久久| 男人天堂亚洲| 日韩国产精品毛片| 一区二区三区无码高清视频| 国产精品一区二区三区99| 欧美一级大黄| 亚洲精品久久7777| 国产91精品对白在线播放| 男人的天堂网av| 国产精品黄页免费高清在线观看| 亚洲精品视频免费看| 国产欧美日韩精品一区二区三区| heyzo在线观看| 亚洲qvod图片区电影| 欧美区视频在线观看| 久久久久久亚洲精品杨幂换脸| 污网站在线免费看| 国内自拍中文字幕| 欧美精品18videos性欧美| 一区二区三区日韩欧美| 自拍偷拍欧美| av在线网页| 蜜臀视频一区二区三区| 国产精品久久久久影院日本| 91福利精品第一导航| 日韩成人免费看| 国产韩日精品| 九七影院97影院理论片免费| 国产精品一区久久久| 欧美精品aⅴ在线视频| 国产精品一区一区| 天海翼精品一区二区三区| 成人午夜在线观看视频| 在线无限看免费粉色视频| 欧美日韩成人在线观看| 五月天丁香久久| 蜜桃精品视频在线观看| 国产成人精品亚洲线观看| 欧美91精品久久久久国产性生爱| 婷婷四房综合激情五月| 欧美肥老妇视频| 欧美综合一区二区三区| 夫妻av一区二区| 日韩在线高清| 欧美三级精品| 一区二区三区视频国产日韩| 夜夜爽99久久国产综合精品女不卡 | 久久久夜精品| 白嫩亚洲一区二区三区| 三级黄视频在线观看| 中国女人做爰视频| 国产精品视频自在线| 亚洲第一二三四五区| 国产精品免费人成网站| 欧美激情1区2区| av国产精品| av中文字幕在线播放| 国产91白丝在线播放| 国产精品无码乱伦| 91久久综合亚洲鲁鲁五月天|