日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2请求处理的内部流程说明(版本二)

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2请求处理的内部流程说明(版本二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 請求處理流程圖
  • 流程說明

請求處理流程圖

流程說明

第 1 步:

客戶端初始化一個指向 Servlet 容器(例如 Tomcat)的請求,例如:在瀏覽器中輸入 http:localhost:8080/Struts2/helloworld/helloworldAction.action 就是提交一個HttpServletRequest 請求。

請求會被 Tomcat 接收到,Tomcat 服務器來選擇處理這個請求的 Web 應用,那就是由 helloworld 這個 web 工程來處理這個請求。

第 2 步:

Web 容器會去讀取 helloworld 這個工程的 web.xml,在 web.xml 中進行匹配,最后發現需要經過一堆的過濾器。

這個請求經過一系列的過濾器(Filter),例如:ActionContextCleanUp、其他過濾器(SiteMesh等)、FilterDispatcher

注意:

這里是有順序的,先 ActionContextCleanUp,再其它過濾器,最后FilterDispatcher。FilterDispatcher 是Struts 2 的調度中心,是 Struts 2 的控制器的核心,也就是 Struts 2 框架中的控制層(Controller)的核心

FilterDispatcher 必須放在濾器鏈的最后,如果在 FilterDispatcher 前出現了如SiteMesh 這種特殊的過濾器,還必須在 SiteMesh 前引用 Struts 2 的ActionContextCleanUp 過濾器。

Struts 2.1.3 版本后核心控制器 FilterDispatcher 被棄用了,替換成 StrutsPrepareAndExecuteFilter,因為 FilterDispatch 在執行 Action 之前不能插入自定義的過濾器, 而 StrutsPrepareAndExecuteFilter 可以在執行 Action 之前添加自己的過濾器。如果要使用 ActionContextCleanUp,則可以通過StrutsPrepareFilter 和 StrutsExecuteFilter 進行替換。

擴展:

Struts 2 的核心控制器 FilterDispatcher,有 3 個重要的方法:destroy()、doFilter()、init(),執行順序是:init() ? doFilter() ? destroy()

第 3 步:

接著 FilterDispatcher 被調用,即容器會創建 FilterDispatcher 實例,然后調 doFilter() 方法,在這個方法中,FilterDispatcher 詢問 ActionMapper 是否需要調用某個 Action 來處理這個(HttpServletRequest)請求,如果 ActionMapper 決定需要調用某個 Action,ActionMapper 會通知 FilterDispatcher 需要處理這個請求,FilterDispatcher 會停止過濾器鏈以后的部分,(這也就是為什么 FilterDispatcher 應該出現在過濾器鏈的最后的原因)。FilterDispatcher 則把請求的處理交給 ActionProxy,即建立一個 ActionProxy 實例,這個對象作為Action 與 xwork 之間的中間層,會代理 Action 的運行過程。

第 4 步:

ActionProxy 通過 ConfigurationManager 詢問框架的配置文件(struts.xml),找到需要調用的 Action 類

注意:

在服務器啟動的時候,ConfigurationManager 就會把 struts.xml 中的所有信息讀到內存里,并緩存,當 ActionProxy 帶著 URL 向他詢問要運行哪個 Action 的時候,就可以直接查找并返回

第 5 步:

ActionProxy 創建一個 ActionInvocation 實例,同時 ActionInvocation 通過代理模式調用 Action。但在調用之前,ActionInvocation 會根據配置加載 Action 相關的所有 Interceptor(攔截器),即調用 Action 的過程前后,涉及到相關攔截器的調用

第 6 步:

一旦 Action 執行完畢,ActionInvocation 負責根據 struts.xml 中的配置找到對應的返回結果 result。返回結果通常是一個需要被表示的 JSP 或者 FreeMarker 的模版(不一定是頁面,也可能是另外的一個 Action 鏈)。在表示的過程中可以使用 Struts 2 框架中繼承的標簽。在這個過程中需要涉及到 ActionMapper。

第 7 步:

最后,ActionInvocation 對象倒序執行攔截器。ActionInvocation 對象執行完畢后,已經得到響應對象(HttpServletResponse)了,最后按與過濾器配置定義相反的順序依次經過過濾器,向客戶端展示出響應的結果,即通過 HTTPServletResponse 返回客戶端一個響應。

總結

以上是生活随笔為你收集整理的Struts2请求处理的内部流程说明(版本二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。