Struts架構詳解

struts-config.xml    Struts配置文件
ActionServlet  控制器
Action Class  包含事務邏輯
ActionForm  顯示模塊數據
ActionMapping  幫助控制器將請求映射到操作
ActionForward  用來指示操作轉移的對象
ActionError  用來存儲和回收錯誤
Struts標記庫  可以減輕開發顯示層次的工作

struts框架的優勢
1.良好的架構和設計
2.可重用,模塊化,擴展性好
3.Open source

struts-config.xml

Struts-config.xml集中了所有頁面的導航定義。對於大型的WEB項目,通過此配置文件即可迅速把握其脈絡,這不管是對於前期的開發,還是後期的維護或升級都是大有裨益的。掌握Struts-config.xml是掌握Struts的關鍵所在。

FormBean部分

<struts-config>
  <!--  Form Bean Definitions -->
  <form-beans>
    <form-bean name=“testform" type="com.cjea.test.TestForm" />
  </form-beans> 

全局轉發部分

<!-- Global Forward Definitions -->
  <global-forwards>
    <forward   name="failure"     path="bad.jsp"/>
    <forward   name="success"     path="/good.jsp" />
  </global-forwards>

action部分

<action-mappings>
   <action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request">
        <forward name="success" path="/test/good.jsp" />
   </action>
<action-mappings> 
</struts-config>

 ActionServlet

ActionServlet 是struts框架 MVC 實現的 controller 部分,它是這一框架的核心。
ActionServlet 創建並使用 Action、ActionForm 和 ActionForward。

ActionServlet的基本功能

截獲用戶的Http請求
把這個請求映射到相應的Action類。
創建一個ActionForm bean實例,將form請求放入formbean的實例中
調用Action實例的perform()方法
將ActioForm bean,Action Mapping對象,request和response對象傳給Action的perform()方法
perform返回一個ActionForword對象,根據方法執行情況轉到相應的jsp頁面.

 

Action Classes


Action 類是業務邏輯的一個包裝。Action 類的用途是將 HttpServletRequest 轉換爲業務邏輯。

ActionForm

ActionForm 維護 Web 應用程序的會話狀態。
ActionForm 是一個抽象類,必須爲每個輸入表單模型創建該類的子類。


ActionForm的使用

假定有一個由 HTML 表單設置的 TestActionForm。Struts 框架將執行以下操作:
檢查 TestActionForm是否存在;如果不存在,它將創建該類的一個實例。
Struts 將使用 HttpServletRequest 中相應的域設置 TestActionForm的狀態。
Struts 框架在將 TestActionForm傳遞給TestAction 之前將更新它的狀態。
struts-config.xml 文件控制 HTML 表單請求與 ActionForm 之間的映射關係。
可將多個請求映射到 TestActionForm 。

Struts標記庫
Struts框架包括自定義標籤庫,它可以用 在很多方面。儘管這些庫並不要求用框 架,但使用它們會有助於程序的開發。

Struts標記庫
struts-bean taglib:包含在訪問bean和bean屬性時使用的tag,也包含一些消息顯示的tag。
struts-html taglib:包含用來生成動態HTML用戶界面和窗體的tag。
struts-logic taglib :包含的tag用來管理根據條件生成輸出文本,和其它一些用來控制的信息。
struts-template taglib包含的tag用來定義模板機制。

Bean Taglib
用於定義新bean、訪問bean及其屬性的標記
在struts-bean.tld中定義了它的標記庫描述器
Bean Taglib主要功能
創建和複製bean的標記
腳本變量定義標記
bean翻譯標記
消息國際化標記
Bean複製標記 (<bean:define>)
可定義新bean,可複製現有bean,還可從現有bean複製屬性。
定義新字符串常數
將現有的bean複製到新定義的bean對象
複製現有bean的屬性來創建新的bean
<bean:define>標記屬性:
Id 新定義的bean腳本變量名稱,必須設置
Type 定義引入腳本變量的類
Value 爲id屬性定義的腳本變量分配一個新的對象
<bean:define>標記屬性:
Name 目標bean的名稱。若value屬性沒有設置,這個屬性就必須設置
property Name屬性定義的bean的屬性名稱,用來定義新的bean
Scope 源bean的作用域。若沒有設置,搜索範圍是從頁作用域到應用程序作用域
toScope 目標bean的作用域。若沒有設置,默認值是頁作用域
舉例
定義一個bean:
<bean:define id="test" value="this is a test"/>
源bean在頁作用域中被拷貝到請求作用域中的另一個bean:
<bean:define id="targetBean" name="sourceBean"
scope="page" toScope="request"/>
腳本變量的標記
從多種資源中定義和生成腳本變量,這些資源包括cookie,請求參數,HTTP標頭等等。
腳本變量的標記屬性:
Id        腳本變量和要定義的頁作用域                 屬性的名稱
Name    cookie/標頭/參數的名稱
Value    如果沒有匹配的cookie或    數值,就返回這個屬性指    定的默認值

腳本變量的標記屬性:
multiple 如果這個屬性設置了任意一個數值,所有匹配的cookie都會被積累並存儲到一個Cookie[](一個數組)類型的bean裏           若無設置,指定cookie的第一個值將作爲Cookie類型的值
舉例
<bean:cookie id="myCookie" name="userName"/>
腳本變量名稱是myCookie,用來創建這個屬性的cookie的名稱是userName。
<bean:header id="myHeader" name="Accept-Language"/>
腳本變量名稱是myHeader,請求標頭的名稱是Accept-Language.

舉例
<bean:parameter id="myParameter" name="myParameter">
腳本變量名稱是myPatameter,它保存的請求參數的名稱也是myParameter
邏輯標記
Struts邏輯標籤庫包含的標記能夠有條件地產生輸出文本
在對象集合中循環從而重複地產生輸出文本,以及應用程序流程控制
它也提供了一組在JSP頁中處理流程控制的標記
邏輯標記封裝在文件名爲struts-logic.tld的標記包中
邏輯標記庫的功能
條件邏輯
重複
轉發/重定向響應
條件邏輯標記
第一類可以比較下列實體與一個常數的大小
第二類在計算標記體之前判斷特定的項目是否存在
第三類根據模板匹配的結果檢查標記體的內容
第一類條件邏輯標記
<equal>  如果常數與被定義的實體相等,返回true
<notEqual> 如果常數與被定義的實體不相等,返回true
<greaterEqual> 如果常數大於等於被定義的實體,返回true
第一類條件邏輯標記
<lessEqual> 如果常數小於等於被定義的實體,返回true
<lessThan> 如果常數小於被定義的實體,返回true
<greaterThan> 如果常數大於被定義的實體,返回true
舉例
判斷名爲"name"的請求參數的值是否是"SomeName"。
<logic:equal parameter="name" value="SomeName">
        The entered name is SomeName
</logic:equal>
舉例
判斷在頁的作用域中是否有一個名爲"bean"的bean,它有一個prop屬性,這個屬性的值是否大於7。
如果這個屬性能夠轉化爲數值,就進行數值比較,否則就進行字符串比較。
<logic:greaterThan name="bean" property="prop" scope="page" value="7">
The value of bean.Prop is greater than 7
</logic:greaterThan>
第二類條件邏輯標記
<logic:present>
<logic:notPresent>
第三類條件邏輯標記
<logic:match>
<logic:notMatch>
重複標記<logic:iterate>
它能夠根據特定集合中元素的數目對標記體的內容進行重複的檢查
集合的類型
java.util.Iterator
java.util.Collection
java.util.Map
java.util.List
數組
舉例
Strlst是一個包含字符串的List,現在要將他內部的字符串全都顯示在瀏覽器裏
<logic:iterate id="element" name="strlst"  indexId="index">
<%=(String)element)%>
</logic:iterate>
轉發標記
<logic:forward>標記能夠將響應轉發給重定向到特定的全局ActionForward上
ActionForward的類型決定了是使用PageContext轉發響應,還是使用sendRedirect將響應進行重定向
此標記只有一個"name"屬性,用來指定全局ActionForward的名稱,例如:
<logic:forward name="myGlobalForward"/>
重定向標記
<logic:redirect>標記是一個能夠執行HTTP重定向的強大工具。
根據指定的不同屬性,它能夠通過不同的方式實現重定向。
它還允許開發人員指定重定向URL的查詢參數。
HTML標記
Struts HTML標記可以大致地分爲以下幾個功能:
顯示錶單元素和輸入控件
顯示錯誤信息
顯示其他HTML元素
模板標記
Struts模板標記可以大致地分爲以下幾個功能:
插入標記<template:insert>
放置標記<template:put>
獲得標記<template:get>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章