轉自 http://blog.sina.com.cn/s/blog_9c10071301015qnl.html
Struts1 技能使用要點及要求
一、 配置文件
Struts框架在啓動時會讀取Struts配置文件,並根據其內容來創建各種組件對象。
下面就介紹一下Struts配置文件的幾個組成部分。
1、< struts-config>元素
該元素是Struts配置文件的根元素,其他所有配置元素必須在< struts-config>與< /struts-config>元素間進行配置。
如:
2、<form-beans>
在該元素中可以包含多個<form-bean>子元素,每個<form-bean>子元素用來描述一個ActionForm Bean。通過<form-bean>將具體的ActionForm映射爲一個邏輯名,在<action>元素中將使用這個邏輯名來引用相應的ActionForm。
3、<action-mappings>元素
在<action-mappings>元素中包含多個<action>元素,每個<action>元素對應用戶的一個請求,通過在<action>元素中的屬性設置來決定處理請求的Action類和需要用到的其他資源。
下面列舉幾個<action>的屬性:
attribute 指定一個key值,在request或者Session範圍內將通過該值存取<action>的name屬性指向的ActionFrom,默認爲name的屬性值。
path 用來指定一個路徑,如果該屬性值與用戶提交的URL匹配,則Struts會根據當前的<action>元素配置進行操作。該值應以“/”開頭。
forward 指定轉發的URL路徑。
input 指定一個當前表單驗證失敗時候,請求將轉發至的路徑。
name 指定一個ActionForm,該值必須在<form-bean>元素中有過定義。
parameter 指定一個參數值,可在Action類的execute()方法中通過ActionMapping對象的getParameter()方法獲取。常見的應用有某一類繼承了DispatchAction後,在用戶請求的URL中將以該值指定的參數作爲方法名,直接調用該類中對應的方法。
scope 指定當前<action>元素中有name屬性指定的ActionForm的存在範圍。可選值有request和session,默認爲session。
Type 指定處理當前請求Action類的完整路徑。
參考配置:
綜上幾個配置,一個簡單的Struts配置基本完成。其他Struts配置元素可以閱讀一些資料自行學習一下。例如,在<form-bean>中的<form-property>子元素、<global-forwards>全局轉發或重定向元素等等。
關於Struts 配置的技能要求,首先要了解配置文件的結構和每個元素基本屬性的含義,能夠成功配置一個包含ActionForm,Action類,Forward,validate的基本流程,在開發過程中無因配置錯誤導致系統無法運行的問題。配置屬性要正確使用,不做無效配置,屬性的自定義值命名規範。
二、 ActionForm
ActionForm是Struts框架的核心組件之一,是Struts的關鍵視圖組件。在我們聲明一個ActionFrom Bean的時候,該類必須繼承org.apache.struts.action.ActionForm類,自定義的ActionForm中可以靈活的添加想從頁面表單中獲取的用戶信息爲類屬性,在用戶發出提交表單請求後,處理該請求的Action類,將通過參數中的ActionForm拿到一個完整的表單信息。但是這個ActionFrom必須在Struts的配置文件中定義過,並且該Action對應的配置行中name屬性指向的正是此ActionFrom的邏輯名。
例如:
Struts 的配置:
一、 Action類
Struts1 要求Action類集成一個抽象基類,在這裏我們通常會看到兩種繼承,一種是繼承org.apache.struts.action.Action,還有就是繼承org.apache.struts.actions.DispatchAction類。
繼承org.apache.struts.action.Action的子類,需在execute方法寫入處理請求的代碼,一般一個Action只能通過一個方法響應。這樣就需要通過request.getParameter()方法來獲取傳入的值,來分辨用戶請求,跳轉到不同的頁面。
而DispatchAction是對org.apache.struts.action.Action進行了功能擴充,DispatchAction本身也是繼承自Action,DispatchAction進是把判斷放到了Struts的配置文件中,如我們自己的類繼承了DispatchAction,我們就可以在類中自定義若干方法,至於頁面具體要指向那個方法來執行本次響應的判斷我們可以通過在URL中添加一個parameter個屬性值進行區分。
例如:
那麼URL就應該是:/tutorv2/class.do?operation=classList
除此之外,我們可以通過ActionMapping指定一個轉發路徑,例如:
轉發的地址,需要在該Action的配置中定義一個<forward>元素:
下面我們看一段完整的Action業務:
用戶提交一個數據表單:
用戶請求一個數據列表:
綜以上所述,基本可以完成一個簡單的Struts業務流程。這部分的技能要求是:能夠在開發過程中熟練的配置和創建一個Action邏輯,根據用戶的不同請求,正確使用Action返回響應結果,無基礎問題異常,不做多餘請求,不做多餘轉發或重定向,不做無用參數傳遞、儘量使邏輯清晰,代碼簡潔,參數和變量、方法命名規範。
除此之外,還需瞭解Struts標籤庫和Validator驗證框架。這裏列舉幾個Struts標籤的使用。Struts 的Validator驗證框架,也是需要大家熟練掌握的,但是由於目前平臺開發過程中大部分驗證都是通過js腳本或Jquery框架來實現,這裏就不做詳細描述。
四、Struts標籤庫
Struts標籤庫主要分爲HTML標籤庫、Bean標籤庫、和Logic標籤庫。
Struts 中的HTML標籤庫 大部分標籤與普通的HTMl元素相對應。
下面介紹幾個主要的HTML標籤庫元素。
1、<html:link> 實現超鏈接,錨點。
例如:<html:link action=”/tutorv2/class.do?operation=classList”>班級列表</html:link>
2、<html:form>用於生成Form表單,必須包含action屬性,否則異常。
例如:
<html:from action=”/tutorv2/class.do?operation=saveClass” method=”post”>
<html:text property=”className”/>
<html:text property=”code”/>
</html:form>
這裏雖然說到了Struts標籤庫的HTML 標籤庫,但是在實際的開發過程中,不明確要求使用。
Struts 中的Bean標籤庫
Bean 標籤庫中的標籤可以訪問已經存在於JSP範圍內的JavaBean,並且可以將一個JavaBean或其中的屬性值定義爲一個變量存放到指定的範圍中供其他標籤訪問。常見的有<bean:page>、<bean:message>、<bean:write>等。
Logic標籤庫
此標籤庫中的標籤可以實現特定的判斷條件,邏輯處理等。我們開發過程中可能會經常用到的一些有:<logic:iterate>循環、<logic:equal>比值相等、<logic: notEqual >比值不等、<logic:empty>判斷指定對象在request和session範圍內是否爲空、<logic:notEmpty>判斷指定對象在request和session範圍內是否不爲空 等等。
以上簡單列舉了幾個Struts 標籤庫的使用和說明,在開發過程中,要求能夠熟練應用Struts標籤庫的Logic標籤庫元素,在Jsp頁中能夠靈活的使用標籤進行判斷或循環、輸出,要注意Logic標籤庫輸出頁面元素時的非空判斷。