天天看點

javaweb Struts的中央控制器

在Struts架構中,有多個元件分擔控制器的工作,它們分别是ActionServlet類,RequestProcessor類和Action類等,其中ActionServlet是Struts架構中的核心控制器。

Struts應用程式處理使用者請求的一般過程

ActionServlet類作為中心Servlet,負責處理所有到來的使用者請求。當ActionServlet接收到一個使用者請求時,将執行如下流程:

1.檢索和使用者請求比對的ActionMapping執行個體,如果不存在,就傳回使用者請求路徑無效的錯誤資訊。

2.如果為ActionMapping配置了Form Bean,則擷取相應範圍内的ActionForm執行個體。如果ActionForm執行個體不存在,就建立一個ActionForm對象,把客戶送出的表單資料儲存到ActionForm對象中。

3.根據ActionMapping配置資訊決定是否需要驗證表單。如果需要驗證,就調用ActionForm的validate()方法。

4.如果ActionForm的validate()方法傳回null,或者傳回一個不包含任何ActionMessage的ActionErrors對象,就表明表單驗證成功,繼續執行下一步。否則傳回input屬性指定的頁面,并向使用者顯示ActionErrors集合中的錯誤資訊。

5.ActionServlet根據ActionMapping執行個體包含的映射資訊決定将請求轉發給哪個Action,如果相應的Action執行個體不存在,則先建立這個執行個體,然後調用Action的execute方法。

6.Action的execute方法傳回 一個ActionForward對象,ActionServlet将請求轉發到這個ActionForward對象指定的元件,通常是一個JSP元件或其他Action。

7.如果ActionForward對象指向一個JSP元件,則将該JSP生成的動态頁面傳回給使用者;如果ActionForward對象指向的仍然是一個Action,則從第1步重新開始執行!

從上述過程可知ActionServlet類是Struts架構的内置核心控制器元件,它繼承了javax.servlet.http.HttpServlet類。Struts的啟動通常從加載ActionServlet開始。Web容器會在首次啟動或Struts應用的第一個請求到達時加載ActionServlet。

ActionServlet第一次被加載後,其init()方法被調用。在init()方法中,Struts架構執行所有必要的初始化工作。

然後,Web容器将調用ActionServlet的doPost()或doGet()方法來處理使用者請求,而它們實際上都是調用process()方法具體處理請求的.

在Struts的中央控制器中寫了Struts的控制器角色,在這篇介紹下Struts的視圖!

Struts的視圖元件:

Struts架構中的視圖元件主要包括:

JSP頁面。

ActionForm類。

Struts自定義标記。

消息資源。

其中,ActionForm類是Struts架構的核心元件之一,是Struts的關鍵視圖元件。在這篇文章中,将讨論ActionForm類及其作用。

ActionForm的作用機理:

ActionForm本質上是一種JavaBean,是專門用來傳遞表單資料的DTD(Data Transfer Object,資料傳遞對象)。它包括用于表單資料驗證的validate()方法和用于資料複位的reset()方法。

Struts架構利用ActionForm對象來臨時存放視圖頁面中的表單資料。例如,一個登入頁面會有一個使用者名輸入框和一個密碼輸入框,以及用來送出登入請求的按扭。當使用者送出登入請求後,Struts将 使用者名和密碼兩個輸入域的資料自動填充到相應的ActionForm對象中,然後控制層可以從該ActionForm對象中讀取使用者輸入的表單資料,也可以把來自模型層的資料存放到ActionForm中,然後傳回給視圖顯示。

ActionForm有(request)和(session)兩種作用域(scope)。如果ActionForm的作用域設定為request,ActionForm執行個體将儲存在request對象中,像其他儲存在request對象中的屬性一樣,僅在目前請求範圍内有效。如果ActionForm的作用域設定為session,那麼ActionForm執行個體将被儲存在session對象中,同一個ActionForm執行個體在整個HTTP會話中有效。

在Struts架構 中,ActionForm的作用機理如下圖:

javaweb Struts的中央控制器

當驗證ActionForm時,如果檢測到一個或多個驗證錯誤,Struts架構會把錯誤轉發回配置檔案struts-config.xml中<action>元素的input屬性所指定的輸入頁面。

ActionForm的使用方法:

下面通過在(Struts重構)建構一個簡單的基于MVC模式的JavaWeb的例子,來介紹一下ActionForm的正确使用,包括如何建立,配置和通路。

1.建立ActionForm

可以擴充Struts軟體包的ActionForm類來建立具體的ActionForm。Struts軟體包中的ActionForm類本身 是一個抽象類,在擴充的時候,為每一個要從HTML表單中捕獲的輸入域定義一個屬性,使表單輸入域與ActionForm屬性一一對應,以使ActionForm能夠捕獲需要的表單輸入。定義了具體的屬性,就可以覆寫父類 的validate()和reset()方法,來實作具體的ActionForm驗證規則和初始化方法。

繼續閱讀