MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。MVC是一種設計模式,它強制性的把應用程序的輸入、處理和輸出分開。
視圖: 視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關的數據,并接受用戶的輸入。視圖不進行任何業務邏輯處理。
模型: 模型表示業務數據和業務處理。相當于JavaBean。一個模型能為多個視圖提供數據。這提高了應用程序的重用性。
控制器: 當用戶單擊Web頁面中的提交按鈕時,控制器接受請求并調用相應的模型去處理請求。然后根據處理的結果調用相應的視圖來顯示處理的結果。
MVC的處理過程:首先控制器接受用戶的請求,調用相應的模型來進行業務處理,并返回數據給控制器。控制器調用相應的視圖來顯示處理的結果。并通過視圖呈現給用戶。
Struts2框架是一個按照MVC設計模式設計的WEB層框架,是在Struts 1和WebWork的技術基礎上進行了合并的全新的框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業務邏輯控制器能夠與ServletAPI完全脫離開。
我們可以把Struts2理解為一個大大的Servlet,而這個Servlet就是ActionServlet。Struts2在處理客戶端請求時,會先讀取web.xml配置文件,根據前端控制器將符合條件的請求分給各個不同的Action處理。在此之前,ActionServlet會把數據封裝成一個JavaBean。
Struts2框架提供了許多的攔截器,在封裝數據的過程中,我們可以對數據進行一些操作,例如:數據校驗等等。當Action執行完后要返回一個結果視圖,這個結果視圖可以跟據struts2的配置文件中配置,選擇轉發或者重定向。
1.在軟件設計上Struts2的應用可以不依賴于Servlet API和struts API。 Struts2的這種設計屬于無侵入式設計;
2.攔截器,實現如參數攔截注入等功能;
3.類型轉換器,可以把特殊的請求參數轉換成需要的類型;
4.多種表現層技術,如:JSP、freeMarker、Velocity等;
5.Struts2的輸入校驗可以對指定某個方法進行校驗;
6.提供了全局范圍、包范圍和Action范圍的國際化資源文件管理實現;
1.Struts2框架是通過Filter啟動的,即StrutsPrepareAndExecuteFilter,此過濾器為struts2的核心過濾器;
2.StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認的配置文件struts.xml完成初始化操作。struts2讀取到struts.xml的內容后,是將內容封裝進javabean對象然后存放在內存中,以后用戶的每次請求處理將使用內存中的數據,而不是每次請求都讀取struts.xml文件。
1)通過ActionContext可以獲得request,application,session三個作用域(struts2實際上是通過適配器來把servlet的api轉換為一個map,并把這些map放在ActionContext里面)。
2)通過ActionContext的子類ServletActionContext去獲取原滋原味的API。
3)可以通過實現ServletRequestAware接口,重寫里面的setServletRequest方法可以獲得request,實際上是通過set的依賴注入。
1)感嘆號定位方法(動態方法)。
2)在xml配置文件中通過配置多個action,使用action的method指定方法。
3)使用通配符(*)匹配方法。
一共10種:
dispatcher是默認的結果類型,把控制權轉發給應用程序里的某個資源。
redirect把響應重定向到另一個資源(包括一個外部資源)
redirectAction把響應重定向到另一個 Action
freemarker、velocity、chain、httpheader、xslt、plainText、stream
1.ActionContext是當前的Action的上下文環境,通過ActionContext可以獲取到request、session、ServletContext等與Action有關的對象的引用;
2.ServletContext是域對象,一個web應用中只有一個ServletContext,生命周期伴隨整個web應用;
3.pageContext是JSP中的最重要的一個內置對象,是JSP四個域對象中最小的。可以通過pageContext獲取其他域對象的應用,同時它是一個域對象,作用范圍只針對當前頁面,當前頁面結束時,pageContext銷毀。
常量可以在struts.xml或struts.properties中配置,兩種配置方式如下:
1.在struts.xml文件中配置常量
<constant name="struts.action.extension" value="do"/>
2.在struts.properties中配置常量(struts.properties文件放置在src下):
struts.action.extension=do