- JavaWeb整合開發實例精通:Struts+Hibernate+Spring
- 閆術卓 吳峻申
- 893字
- 2018-12-31 14:45:33
1.2.3 FilterDispatcher和Action概述
Action可以稱之為Struts 2的核心技術。每一個URL都可以被一個特殊的Action所映射。該Action是開發人員根據Web項目特定需求進行開發所實現的。
Action中通過一個無參的execute方法來執行控制轉向,并且返回一個String類型變量或者Result對象。當然也可以在Struts.xml文件中進行特殊指定方法名,這樣就可以不用execute作為方法名,而是用開發人員自己指定的方法名。
(1)如果返回的是一個String類型變量,相應導航的目標視圖是在Struts.xml配置文件中定義,配置文件把這個變量值和定義的目標視圖名相匹配,這樣系統就能正確導航到目標視圖。
(2)如果返回的是Result對象,因為Struts 2本身支持返回結果是Result對象的映射導航,可是像JSP這種視圖中顯示的數據都是Java中的基本類型,這就涉及到類型轉化概念,在Struts 2中設計者也考慮到這一點,因此也提供了類型轉化的機制,在稍后章節會具體介紹。
在Web項目中,如果HTTP請求被servlet容器接收,然后導航到定義的目標視圖時,有可能在之前會在Web項目中定義個一個過濾器(Filter)對它進行處理。在Struts 2中是由一個叫FilterDispatcher的類來執行該過濾器的HTTP請求處理功能。
FilterDispatcher也是Struts 2的一個核心技術,它提供了處理HTTP請求用來訪問Web項目框架的訪問方法。假設我們啟動了某個Web項目,很多可設置的元素都已經在該Web項目框架中定義,例如Spring可管理的JavaBean配置、Action的映射定義等。在此時FilterDispatcher會執行下列這些操作。
●讀取靜態數據信息:比如某些文件或者JavaScript代碼等。
●決定需要轉發或導航的Action配置。舉例說明,從HTTP請求中發出的目標視圖的導航定義,一般在Struts.xml配置文件中都配置了Action名字,系統會根據Action配置去配置文件中尋找這個Action名字的Action。也就是說通過FilterDispatcher去搜尋后綴名為"Action"的所有Action映射。
●創建Action的Context:從HTTP請求中發出的數據信息都是存儲在request或session中,而Struts 2則封裝了這些HTTP的對象,創建Context對象作為存儲數據之處,并且通過Context的一些內置方法可以得到HTTP請求存儲在request或session中的數據。
●創建Action代理:Action代理是一個附加的邏輯處理。它實際上包含了Web項目所有的配置和Context信息,用來處理HTTP請求并包含請求處理完畢后哪些要返回的Result對象。
●內存清理和性能優化:為了確保在Web項目啟動運行后,內存不會溢出,以至出現運行越來越慢的情況,FilterDispatcher會自動執行清理動作,主要清理Context對象,保證系統中沒有冗余對象或垃圾對象。