1. 程式人生 > >Struts1配置檔案總結

Struts1配置檔案總結

一、在web.xml中安裝Struts

要想使用Struts,我們接觸到的第一個配置檔案就是web.xml。實際上,Struts的入口點是一個名為ActionServlet的Servlet。在第一次訪問Struts時,建立這個ActionServlet類的物件例項,並呼叫ActionServlet類中的init方法來進行初始化(其實是讀取struts-config.xml檔案中的內容,並根據struts-config.xml中的內容來初始化相關的資源)。因此,就要在web.xml檔案中安裝這個ActionServlet,並在ActionServlet的初始化引數中指定struts-config.xml的位置。

二、struts-config.xml檔案的結構

struts-config.xml是Struts的核心配置檔案。也就是說,只要是使用Struts,就必須配置struts-config.xml檔案。struts-config.xml檔案的所有配置項都要放到頂層元素<struts-config>中,主要配置項有如下七個:

1.FormBean:在<form-beans>元素中配置。

2.Action對映:在<action-mappings>元素中配置。

3.全域性Forwards:在<global-forwards>元素中配置。

4.全域性異常(Exception):在<global-exceptions>元素中的配置。

5.控制器(Controller):在<controller>元素中配置。

6.資訊資源:在<message-resources>元素中的配置。

7.外掛:在<plug-in>元素中配置。

下面我們就分別來看一下這七部分的具體配置方法。

三、配置Formbean和Action對映

這兩個配置項是Struts配置的核心,也就是說我,一個完整的Struts應用程式都會擁有這兩項配置。

每一個Formbean要在<form-beans>元素中定義一個<form-bean>子元素。下面的程式碼給出了一個標準的Formbean的配置方法:

<form-beans>
    <form-bean name="myForm" type="actionform.MyActionForm" />
</form-beans>

其中name屬性表示Formbean名,type屬性表示Formbean類的全名(包名+類名),一般type屬性值需要指定一個org.apache.struts.action.ActionForm類或其子類。type屬性值還可以指定一個動態form,如org.apache.struts.action.DynaActionForm,或這個類的子類。

在<form-beans>元素中定義的Formbean一般用於將客戶端瀏覽器提交的資料對映為Java Bean的形式,最終開發人員可以直接使用Java Bean來操作客戶端提交的資料。Formbean同時還有驗證資料的功能(在validate方法中驗證)。Formbean有時還會作為其他用途使用,如使用動態form和LocaleAction類配合使用來進行本地化操作。

每一個Action對映要在<action-mappings>元素中定義一個<action>子元素。Action對映的主要功能是將Struts動作的訪問路徑(一般以.do結尾)和Struts動作類相對應。同時可以指定一個Formbean來接收和驗證客戶端提交的資料。下面的程式碼給出了一個標準的配置Action動作的方法:

<action-mappings>
    <action name="myForm" path="/myaction"  scope="request"  validate="true" type="action.MyAction" input="/mystruts/error.jsp">
         <forward name="success" path=" /mystruts/success.jsp" />
    </action>
</action-mappings>

四、配置全域性Forwards

每一個全域性的Forwards需要在<global-forwards>元素中定義一個<forward>子元素。全域性 Forwards可以被所有的Action、異常處理以及一些Struts標籤(如<html:link>)訪問。下面的程式碼給出了一個標準的全域性Forward的配置方法:

<global-forwards>
     <forward name="myforward" path="/mystruts/newProduct.jsp" />
</global-forwards>

五、配置區域性和全域性異常(Exception)

在Struts中處理異常的方法非常多,然後,為了使處理異常的方式更靈活。Struts框架允許以配置的方式來處理異常。

Struts中的異常配置可分為區域性和全域性異常。這兩種異常配置的方法完全一樣,只是配置程式碼的位置不同。配置區域性異常的<exception>元素在<action>元素中,而全域性異常的<exception>元素在<global-exceptions >元素中。區域性異常的優先順序大於全域性異常的優先順序。

下面的程式碼給出了一個標準的全域性異常的配置方法:

<global-exceptions >
    <exception key="error.name.blank" type="java.lang.Exception" path="/error.jsp"/>
</global-exceptions>

其中key屬性表示在屬性檔案中的key,一但Struts Action的execute方法丟擲異常,Struts首先會在區域性和全域性異常中匹配type屬性所指定的異常型別。如果匹配成功,就會跳轉到path屬性所指的Web資源(在本例中是"/error.jsp")。如果在error.jsp頁面中使用<html:errors/>標籤顯示錯誤資訊,就會輸出key屬性所對應的值。

<exception>元素除了可以使用path屬性指定要跳轉的Web資源外,也可以使用handler屬性指定用於處理異常的類。如下面的程式碼所示:   

<global-exceptions>
    <exception key="error.email.invalid"  type="java.lang.Exception" handler="exceptions.EmailException"/>
</global-exceptions>

其中exceptions.EmailException類必須繼承org.apache.struts.action.ExceptionHandler類,而且我們必須覆蓋execute方法。

ExceptionHandler類的execute方法的定義如下:

public ActionForward execute( Exception ex,ExceptionConfig ae,ActionMapping mapping,
                            ActionForm formInstance,HttpServletRequest request,
                            HttpServletResponse response) throws ServletException;

六、配置控制器(Controller)

控制器可能是這七個配置項上使用最少的一項。它主要用來覆蓋一些預設的Struts設定。下面是幾個常用的Struts設定:

1.maxFileSize:指定在檔案上傳時的最大檔案尺寸。可以使用K、M和G作為單位。如maxFileSize="2M"。maxFileSize的值只能是整數,不能是小數,如maxFileSize=1.2M是不合法的。

2.nocache:告訴Struts是否應該緩衝內容。指定為nocache="true",Struts將不會緩衝內容。預設值為true。

3.contentType:指定預設的ContentType欄位值,如果要傳送的內容的預設格式是HTML,我們可以指定contentType的值為"text/html"。

下面的程式碼是一個完成的控制器的配置:

<controller maxFileSize="2M" contentType="text/html" nocache="false" />
七、配置資訊資源

資訊資源使用<message-resources>元素進行配置。下面是一個配置資訊資源的例子:

<message-resources parameter="struts.application" key="global" />

其中parameter屬性表示儲存資訊資源的屬性檔案的位置,對於上面的程式碼來說,屬性檔案的位置是<Web根目錄>"WEB-INF"classes"struts"application.properties。key屬性表示application.properties檔案的標識。如果沒有key屬性,這個屬性檔案就是預設的屬性檔案。當指定key屬性時,在使用這個屬性檔案時,需要使用相關標籤的bundle屬性指定這個key值。

屬性檔案中的值可以使用Struts標籤來獲取,如屬性檔案中的一個key是key.msg.submit。那麼使用<bean:message>標籤獲取這個屬性檔案中的key值的程式碼如下:

<bean:message key="key.msg.submit" bundle="global"/>

屬性檔案也可以用在獲得錯誤資訊上,如在validate方法中使用如下的程式碼來指定錯誤提示資訊:

errors.add("name",new ActionMessage("error.name.blank"));

而在JSP頁面中可以使用如下的程式碼來顯示這個錯誤資訊:

<html:errors property="name" bundle="global"/>

八、配置Struts外掛

Struts之所以強大,在很大程度上取決於它支援通過外掛的方式進行擴充套件,如前面講的Validator和Tiles,都是以Struts外掛形式釋出的。Struts外掛使用<plug-in>元素進行配置,如下面的程式碼所示:

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
     <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" />
</plug-in>

其中className屬性指定了Struts要呼叫的外掛類名。property屬性指定了外掛需要的屬性名,而value屬性指定了相應的屬性值。