1. 程式人生 > >Struts2訪問流程和架構

Struts2訪問流程和架構

Struts2訪問流程和架構

一、訪問流程:

在這裡插入圖片描述

描述執行流程

( 1 ). 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求 (客戶端提交一個HttpServletRequest請求。)

(2)請求被提交到一系列的過濾器(Filter)。

如(ActionContextCleanUp、其他過濾器(SiteMesh等)、 FilterDispatcher。注意:這裡是有順序的,先ActionContext CleanUp,再其他過濾器(Othter Filters、SiteMesh等),最後到FilterDispatcher。

FilterDispatcher是控制器的核心,就是MVC的Struts 2實現中控制層(Controller)的核心。

常規情況官方推薦使用StrutsPrepareAndExecuteFilter替代FilterDispatcher。

(3)FilterDispatcher詢問ActionMapper是否需要呼叫某個Action來處理這個(HttpServlet Request)請求,如果ActionMapper決定需要呼叫某個Action,FilterDispatcher則把請求的處理交給ActionProxy。

(4) ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置檔案,找到需要呼叫的Action類。

(5)ActionProxy建立一個ActionInvocation例項,同時ActionInvocation通過代理模式呼叫Action。(有點類似與遞迴操作),但在呼叫之前,ActionInvocation會根據配置載入Action相關的所有Interceptor(攔截器)。

(6)Action執行完畢後,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result。

二、struts2架構(內部執行流程)

在這裡插入圖片描述

1)客戶端發出HTTP請求

(2)然後請求被核心過濾器StrutsPrepareAndExecuteFilter攔截

(3)核心過濾器將請求轉發到Action對映器,Action對映器負責識別當前的請求是否需要交由Struts2處理。

(4)Action對映器返回需要struts2處理的資訊,StrutsPrepareAndExecuteFilter會建立一個Action代理

(5)Action代理並不知道執行哪一個Action,它會向配置管理器詢問呼叫哪一個Action,配置管理器會從struts.xml讀取我們配置的Action資訊。

(6)Action代理建立相關請求的Action物件,呼叫相關的方法之前,struts2的一系列攔截器會幫我們做一些操作,例如獲取請求引數等。

(7)然後呼叫execute方法根據返回的字串去匹配相應的頁面,

(8)頁面可以獲取一些頁面模板,然後生成最終頁面,再倒序的執行攔截器的後續操作

(9)最後生成HTTP響應內容


原文:https://blog.csdn.net/c99463904/article/details/71075344