Struts2框架介紹

1,一個完整的Java Web所涉及的內容包括:(1)Java Bean組件 (2)EJB組件 (3)自定義的JSP標簽

(4)XML (5)Web服務器和應用服務器

2,Java Bean在JSP中的應用

(class中存放的是JavaBean的路徑)

(1)獲取JavaBean屬性:

(2)給某個JavaBean屬性賦值:

3,Web組件之間的三種關聯關系

(1)請求轉發

(2)URL重定向 response.sendRedirect(...)

(3)包含 <%@ include file=...%>

4,MVC:Model-View-Countroller.即模型-視圖-控制器,是一種軟件設計模式。它強制地把應用程序的輸入、處理和輸出分開。MVC把應用程序分成三個核心模塊:模型、視圖和控制器。對于基于請求/響應方式的WEB應用,模型位于WEB服務器端,視圖位于用戶瀏覽器端。

5,MVC處理過程:

首先,控制器接收用戶的請求,并決定應該調用哪個模型進行處理

然后,模型根據用戶請求進行相應的業務邏輯處理,并返回數據

最后,控制器調用相應的視圖來格式化模型返回的數據,并通過視圖呈現給用戶

用Servlet技術實現控制器的功能,用JavaBean技術實現模型的功能。

6,Struts:實質上是在JSP Model2上實現的一個MVC框架。在Struts框架中,模型由實現業務邏輯的JavaBean或EJB組件構成,控制器由ActionServlet和Action來實現,視圖由一組Jsp文件構成。

7,ActionForm Bean:Struts框架利用文本進行視圖和控制器之間表單數據的傳遞。

8,Struts的控制器:由ActionServlet類和Action類來實現

ActionServlet類:在MVC模型中扮演中央控制器的角色,主要負責接收HTTP請求信息,根據配置文件struts_config.xml的配置信息,把請求轉發給適當的Action對象。

Action類:負責調用模型的方法,更新模型的狀態,并幫助控制應用程序的流程。

在配置文件中,每一個Action的映射信息都通過一個元素來配置。

9,軟件的分層結構:表現層、業務邏輯層、數據訪問層。

10,Web項目的結構:src目錄下存放Java源文件,源文件編譯后會自動輸出到WebRoot/WEB-INF/classes目錄下,WebRoot是Web應用程序的根目錄。有時候各個分塊代碼是正確的,但就是發送錯誤,可能就是因為文件放置的位置不當造成的,可通過調試解決。

11,FilterDispatcher:Struts2框架是基于MVC模式開發的,它提供了一個核心控制器,用于對所有的請求進行統一處理,這個控制器是由一個名為FilterDispatcher的Servlet過濾器來充當的。

12,web.xml和struts.xml

web.xml:Web應用程序的部署描述符文件

struts.xml:對action進行配置

13,Struts 2 的開發步驟:

(1)準備類庫

(2) 在web.xml文件中配置FilterDispatcher。

(3)開發action。針對每一個功能點,編寫一個action類。

(4)編寫相關的結果頁面。針對action返回的結果代碼,編寫相應的結果頁面

(5)在Web應用程序的WEB-INF/classes目錄下創建struts.xml,對action進行配置,將頁面與結果頁面關聯在一個。

14,使用領域對象來接收用戶輸入。傳統的Web應用程序調用HttpServletRequest的getParameter方法從請求中獲取數據。Struts2的action完全與Web層解耦,要獲取Web層的數據,需要使用ActionContext,它為action提供了一個執行上下文。

15,Struts 自動實例化對象特性

該請求等同于調用:action.getUser().setUsername(...);

Struts2 會遍歷所有的請求參數,自動依次實例化任何用于填充數據的對象。上述例子Struts將依次調用一下方法:

action.getUser();

action.setUser(new User());

action.getUser().setUsername();

16,struts2的執行流程:

\ |/ struts.xml

\|/

類的實現

17,使用action的屬性接收用戶輸入,此時不需要使用模型對象。

18,Struts2對HttpServletRequest、HttpSession和ServletContext進行了封裝,構造了三個Map對象來替代這三種對象,在Action中,直接使用對應的Map對象來保存和讀取數據。

使用com.opensymphony.xwork2.ActionContext類

ActionContext是action執行的上下文

(1)get(object key):得到請求Map對象,需要為get()方法傳遞參數"request"。

(2)getSession():HttpSession的Map對象

(3)getApplication:ServletContext的Map對象

19,Struts2框架由兩部分組成:XWork2和Struts。XWork提供了很多核心功能:IoC容器,強大的表達式語言(OGNL),數據類型轉換,驗證和可插入的配置。XWork框架的核心概念包括:aciton、攔截器和result。

攔截器的工作原理:

一個HTTP請求到達Struts2 的FilterDispatcher之后,就會被轉換成一個action command。這個action command在穿越了一系列Struts2和XWork的攔截器之后,最后執行用戶編寫的Action實例。在Action執行之后,響應還會穿越相同的攔截器(相反順序),最后通過Struts2的HttpServletResponse轉換成Web可識別的響應(例如JSP)。

20,Struts2的體系結構

(1)一個初始的請求到達Servlet容器(tomcat)后,將被傳遞給一個標準過濾器鏈。

(2)接下來,必須的FilterDispatcher被調用,它輪詢ActionMapper以便確定這個請求是否應該調用一個action.

(3)如果ActionMapper確定一個Action應該被調用,那么FilterDispatcher就把控制權委派給ActionProxy,ActionProxy從struts.xml文件中讀取配置信心。

(4)ActionProxy創建一個實現了命令模式的ActionInvocation。ActionInvocation在調用action之前會依次調用所用配置的攔截器。

(5)一旦action執行返回,ActionInvocation就要查找這個acion的結果碼所對應的result(action的結果碼和result的映射在struts.xml文件中配置),然后執行這個result。

21,Struts2的配置文件

(1)web.xml:Web部署描述符,包括所有必需的框架組件。由開發人員編寫。

(2)struts.xml:主要的配置文件,包含result映射,action映射,攔截器配置等。由開發人員編寫

(3)struts.properties:struts2框架的屬性配置,由開發人員編寫

(4)struts-default.xml:Struts2提供的默認設置,由框架提供。

(5)strits-plugin.xml:struts2框架的插件所用的配置文件,由插件提供。

22,對Struts2標簽庫的配置

的子元素的內容:/struts-tags

/struts-tags

23,Bean配置

Struts2是一個可擴展的框架,框架的核心組件都是可配置的,這些組件通過Struts2自己的依賴注入容器來裝配。通過bean元素來配置組件實現類。

24,包配置

Struts2中的包類似于Java中的包,提供了將action、result、攔截器等組織為一個邏輯單元的一種方式,提高了重用性。Struts2中的包可以擴展另外的包,從而”繼承”原有包的所用定義。

package元素的屬性

name:被其他包引用時的鍵extends:指定要擴展的包

namespace:指定名稱空間abstract:聲明包抽象的

25,名稱空間(Namespace)配置

namespace屬性可以將包中的action配置為不同的名稱空間,這樣在不同的名稱空間中可以使用同名的action。

26,包含(include)配置

分而治之,在每個模塊單獨提供一個配置文件,對其進行配置,然后再struts.xml文件中使用include元素來包含其他的配置文件

27,攔截器(Interceptor)配置

攔截器允許你在action執行前后插入代碼執行。攔截器可以為action動態添加輸入驗證、對象組裝、權限控制、日志記錄等功能,而不需要修改action。

為action配置引用的攔截器,首先需要在interceptor元素中使用interceptor元素定義攔截器,然后再action元素中使用interceptor-ref元素指定引用的攔截器。interceptor元素有兩個必需的屬性:name和class。前者指定攔截器的名字,后者指定攔截器的完整類名。

如果一個action需要多個攔截器,可以將多個攔截器組合在一起,組成一個攔截器棧,然后再action中直接引用攔截器棧即可。interceptor-stack。

如果多個action都需要引用相同的攔截器,那可以使用default-interceptor-ref元素來定義一個默認的攔截器棧引用,這樣就不需要為每個action指定引用信息了。

28,Action映射

action映射:將一個請求URI(即aciton名字)映射到一個action類,當一個請求匹配某個action的名字時,框架就使用這個映射來確定如何處理請求。struts.xml文件中的每一個action元素就是一個action映射。

action元素的屬性

name:action的名字,用于匹配請求URIclass:Action實現類的完整類名

method:執行Action時調用的方法converter:應用于action類型轉換器的完整類名

29,method屬性

在配置action時,可以通過action元素屬性來指定action調用的方法,所指定的方法必須遵循與execute方法相同的格式。這樣就可以在同一個類中完成相關的任務,而不需要去編寫不同Action類。(解釋:本來一個任務對應一個class,現在一個任務對應一個class的一個方法)

30,模擬struts中的ForwardAction

在struts中,所有的URL都指向action,而不是JSP頁面。但有時只需要轉發請求,不想再編寫action類的做法:

將action元素的class屬性省略,那將默認使用com.opensymphony.xwork2.ActionSupport類,如:

/index.jsp

31,默認的action

如果請求的一個action不存在,將顯示錯誤,此時可以指定一個默認的action,如果一個請求沒有其他的action匹配,那么默認的action將被執行。

默認的action使用default-action-ref元素來聲明。

32,result:一個result代表一個可能的輸出。當Action類的方法執行完成時,它返回一個字符串類型的結果碼,框架根據這個結果碼選擇對應的result,向用戶輸出。

33,result元素的屬性

name:指定result的邏輯名type:指定result類型,不同類型的result代表了不同類型的結果輸出

34,result映射配置小記

絕對路徑以斜杠(/)開頭,相對于當前的Web應用程序的上下文路徑;相對路徑不以斜杠(/)開頭,相對于當前執行的action路徑。

35,struts2中預定義的結果類型:

(1)dispatcher:用于web資源的集成,包括jsp的集成

(2)redirect:用于重定向到另外的URL(WEB資源)

(3)redirectAction:用于定向到另外的action映射

.......

36,dispatcher結果類型

有兩個屬性:location和parse。可通過struts.xml配置文件中的result元素的param子元素來設置。其中location參數用于指定action執行完畢后要轉向的目標資源,parse屬性是一個布爾類型的值,如果為true,則解析location參數中的OGNL表達式。

37,全局結果

全局結果在包中定義,在這個包中的所有action可以共享結果。全局結果也是使用result元素來配置,只不過不是在aciton元素中嵌套,而是在global-results元素中嵌套。

38,動態結果

動態結果:在配置時不知道要執行哪一個結果,在運行時刻才能確定執行的結果

${屬性名}

39,異常處理

在struts.xml文件中配置異常映射,將一種異常類型和一個結果對應起來,由這個結果負責對異常作出響應。如果Action的方法在執行期間拋出一個異常,這個異常會被框架自動捕獲,然后框架根據配置文件中的異常映射,找到預定義的結果來對異常作出響應。

異常映射攔截器已經配置好,剩下的工作就是使用exception-mapping元素來配置異常映射,將異常類型映射到指定的結果。exception-mapping有兩個屬性:exception和result。前者指定一個異常類型的完整類名,后者指定對該類型進行處理的結果的名字。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容