Struct2 (一)


STRUCT2 權威指南(1)

MVC思想將一個應用分成三個基本部分:Model(模型)、View(視圖)和Controller(控制器),這三個部分以最少的耦合協同工作,從而提高應用的可擴展性及可維護性。

(1)Model部分

Struts 1的Model部分主要由底層的業務邏輯組件充當,這些業務邏輯組件封裝了底層數據庫訪問、業務邏輯方法實現。實際上,對於一個成熟的企業應用而言,Model部分也不是一個簡單的JavaBean所能完成的,它可能是一個或多個EJB組件,可能是一個WebService服務。總之,Model部分封裝了整個應用的所有業務邏輯,但整個部分並不是由Struts 1提供的,Struts 1也沒有為實現Model組件提供任何支持。

(2)View部分

Struts 1的View部分采用JSP實現。Struts 1提供了豐富的標簽庫,通過這些標簽庫可以最大限度地減少腳本的使用。這些自定義的標簽庫可以輸出控制器的處理結果。

雖然Struts 1提供了與Ties框架的整合,但Struts 1所支持的表現層技術非常單一:既不支持FreeMarker、Velocity等模板技術,也不支持JasperReports等報表技術。

(3)Controller部分

Struts 1的Controller由兩個部分組成。

— 系統核心控制器:由Struts 1框架提供,就是系統中的ActionServlet。

— 業務邏輯控制器:由Struts 1框架提供,就是用戶自己實現的Action實例。

Struts 1的核心控制器對應圖1.7中的核心控制器(ActionServlet)。該控制器由Struts 1框架提供,繼承HttpServlet類,因此可以配置成一個標准的Servlet,該控制器負責攔截所有HTTP請求,然后根據用戶請求決定是否需要調用業務邏輯控制器,如果需要調用業務邏輯控制器,則將請求轉發給Action處理,否則直接轉向請求的JSP頁面。

業務邏輯控制器負責處理用戶請求,但業務邏輯控制器本身並不具有處理能力,而是調用Model來完成處理。

Struts 1提供了系統所需要的核心控制器,也為實現業務邏輯控制器提供了許多支持。因此,控制器部分就是Struts 1框架的核心。有時候,我們直接將MVC層稱為控制器層

1.1 常見的MVC框架

 

常見的MVC框架有JSF、Tapestry和SpringMVC。我們主要介紹SpringMVC框架

 

1.2 Struct2體系介紹

Struts 2的體系與Struts 1體系的差別非常大,因為Struts 2使用了WebWork的設計核心,而不是使用Struts 1的設計核心。Struts 2大量使用攔截器來處理用戶請求,從而允許用戶的業務邏輯控制器與Servlet API分離

 

1.3 struct2的配置文件

 

Struts 2的配置文件有兩份:

— 配置Action的struts.xml文件。

— 配置Struts 2全局屬性的struts.properties文件。

struts.xml文件內定義了Struts 2的系列Action,定義Action時,指定該Action的實現類,並定義該Action處理結果與視圖資源之間的映射關系

文件實例(structs.xml):

 

 1 <struts>
 2 <!-- Struts 2的Action都必須配置在package里 -->
 3  <package name="default" extends="struts-default">
 4  <!-- 定義一個Logon的Action,實現類為lee.Logon -->
 5  <action name="Logon" class="lee.Logon">
 6 <!-- 配置Action返回input時轉入/pages/Logon.jsp頁面 -->
 7  <result name="input">/pages/Logon.jsp</result>
 8  <!-- 配置Action返回cancel時重定向到Welcome的Action-->
 9 <result name="cancel" type="redirect-action">Welcome</result>
10  <!-- 配置Action返回success時重定向到MainMenu的Action -->
11  <result type="redirect-action">MainMenu</result>
12 <!-- 配置Action返回expired時進入ChangePassword的Action鏈 -->
13  <result name="expired" type="chain">ChangePassword</result>
14 </action>
15  <!-- 定義Logoff的Action,實現類為lee.Logoff -->
16 <action name="Logoff" class=" lee.Logoff">
17  <!-- 配置Action返回success時重定向到MainMenu的Action -->
18 <result type="redirect-action">Welcome</result>
19 </action>
20 </package>
21 </struts>

 

在上面的struts.xml文件中,定義了兩個Action。定義Action時,不僅定義了Action的實現類,而且的定義Action的處理結果時,指定了多個result,result元素指定execute方法返回值和視圖資源之間的映射關系。對於如下配置片段:

 

<result name="cancel" type="redirect-action">Welcome</result>

 

表示當execute方法返回cancel的字符串時,跳轉到Welcome的Action。定義result元素時,可以指定兩個屬性:type和name。其中name指定了execute方法返回的字符串,而type指定轉向的資源類型,此處轉向的資源可以是JSP,也可以是FreeMarker等,甚至是另一個Action——這也是Struts 2可以支持多種視圖技術的原因。

除此之外,Struts 2還有一個配置Struts 2全局屬性的Properties文件:struts.properties。該文件的示例如下:

#指定Struts 2處於開發狀態

struts.devMode = false

//指定當Struts 2配置文件改變后,Web框架是否重新加載Struts 2配置文件

struts.configuration.xml.reload=true

正如上面見到的,struts.properties文件的形式是系列的key、value對,它指定了Struts 2應用的全局屬性

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM