Struts-config.xml配置文件各個元素的詳解

struts-config.xmlStruts的主要配置文件,在該文件中,可以配置數據源、form-beanactionplug-in(插件)和資源文件的信息。其文件(Struts1.2版本)主要結構如下所示:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> </struts-config>     <data-sources>         <data-source>         </data-source>     </data-sources>         <form-beans>         </form-bean>     </form-beans>     <global-forwards>         <forward/>     </global-forwards>     <action-mappings>         <action />     <controller />     <message-resources />     <plug-in /> </struts-config>

       以上各元素必須是按照這個順序的,若開發人員打亂順序,很可能引起Struts容器啓動時出錯。

       當然struts-config.xml還有<display-name /><description /><icon />子元素,因爲它們用得很少,在此不再贅述。只是講述常用的子元素的配置。

1. data-sources

本節講述子元素data-sources的配置,該元素可以配置一個或多個data-source元素,即數據源元素,可以通過<set-property>設置driverClassurluserpassword等屬性。配置實例如下:

<data-source>

                            <!-- 所用的JDBC驅動類,必須-->

                            <set-property property="driverClass" value="com.mysql.jdbc.Driver"/>

                            <!-- 所用的JDBCURL,必須-->

                            <set-property property="url" value="jdbc:mysql://localhost/test"/>

                            <!-- 同時打開的最小連結數,缺省值爲1,可選-->

                            <set-property property="minCount" value="1"/>

                            <!-- 同時打開的最大連結數,缺省值爲2,可選-->

                            <set-property property="maxCount" value="5"/>

                            <!-- 連結到數據庫的用戶名,必須-->

                            <set-property property="user" value="root"/>

                            <!-- 連結到數據庫的密碼,必須-->

                            <set-property property="password" value="root"/>

                   </data-source>

開發人員還可以設置Key(綁定在ServletContext上的DataSource實例的索引鍵,若不設定則缺省爲Action.DATA_SOURCE_KEY,如果在應用程序中有多於一個的DataSource,則必須設置Key的值)、Description(關於DataSource的描述信息)、ReadOnly(如果設爲true,則表示該連結是隻讀的,缺省爲false)、LoginTimeout(創建連結的最大允許時間,以秒爲單位)和AutoCommit(如果爲true,則每次execute之後會強制回滾。缺省爲true)屬性。

在實際項目中,例如在Hibernate + Struts構建的系統中,一般使用Hibernatehibernate.cfg.xml文件來配置數據源的信息。而在Hibernate + Struts + Spring構建的系統中,一般使用spring的配置文件(eg. applicationContext.xml)來配置數據源的信息。

2. form-beans

子元素form-beans用來配置綁定到Action的各個FormBean的實例。每個FormBean實例用form-bans的子元素form-bean來定義。form-bean又分普通的FormBan和動態FormBean

1)普通form-bean

普通FormBean需要定義一個JavaBean類,在form-bean元素中指定該類。普通form-bean元素的定義格式如下:

<form-bean name="FormBean的名稱" type="FormBean對應JavaBean類的全路徑"/>

Eg. <form-bean name="UserForm"

              type="com.amigo.struts.form.user.UserForm" />

對應的FormBean類一般是繼承ActionForm類,例如下面的例子定義了一個UserForm,它具有userNamepassword兩個屬性。該類的代碼如下:

package com.amigo.struts.form.user;

import org.apache.struts.action.ActionForm;

public class UserForm extends ActionForm {

         private static final long serialVersionUID = 1L;
         

         /** 用戶名.*/

         private String userName;         

         /** 密碼. */

         private String password;

         public String getPassword() {

                   return password;

         }

         public void setPassword(String password) {

                   this.password = password;

         }

         public String getUserName() {

                   return userName;

         }

         public void setUserName(String userName) {

                   this.userName = userName;

         }

}

2)動態form-bean

       動態form-bean不需要定義對應的javabean類,其元素都在struts-config.xml中定義。其type爲:org.apache.struts.validator.DynaValidatorForm。下面的動態FormBean定義了userNamepassword屬性,配置如下:

<form-bean name="UserForm" type="org.apache.struts.validator.DynaValidatorForm">

             <form-property name="userName" type="java.lang.String"/>

             <form-property name="password" type="java.lang.String"/>

</form-bean>

3 global-forwards

       global-forwards用於配置全局轉發,struts首先會在<action-mappings>元素中找對應的<forward>,若找不到,則到全局轉發配置中找。它包含0個或多個<forward/>元素,格式如下所示:

<forward name="唯一的名稱" path="指向資源的相對路徑"/>

Eg.

<global-forwards>

                   <forward name="failed" path="/error.jsp" />

                   <forward name="success" path="/ success.jsp" />

</global-forwards>

<forward/>元素還有一個redirect屬性,其默認值爲false,如果redirect設爲true的時候,則用HttpServletResponse.sendRedirect()方法,否則用RequestDispatcher.forward()方法,缺省爲false

4 action-mappings

       該元素用於將Action元素定義到ActionServlet類中,它含有0到多個<action/>元素,其格式如下:

<action-mappings>

<action path="Action請求的相對路徑"

type="Action的對應類的全路徑"

name="Action綁定的FormBean"

<forward name="指定處理相應請求所對應的地址" path="相對路徑"/>

</action>

</action-mappings>

       每個action子元素可包含一個或多個forward子元素。除了pathtypename屬性外,action還具有如下屬性:

l         scope:指定ActionForm Bean的作用域(sessionrequest),缺省爲session(可選)

l         input:當Bean發生錯誤時返回的路徑(可選)

l         classname:指定一個調用這個Action類的ActionMapping類的全名。缺省用org.apache.struts.action.ActionMapping(可選)

l         include:如果沒有forward的時候,它起forward的作用(可選)

l         validate:若爲true,則會調用ActionFormvalidate()方法,否則不調用,缺省爲true(可選)。

forward屬性也是可選的。

action元素定義舉例如下:

Eg1.

<action-mappings>

<action

 path="/userAction"

 type="com.amigo.struts.action.UserAction"

 name="UserForm"

 scope="request"

 validate = "false"

 parameter="method" >

             <forward name="error" path="/user/error.jsp" />

         <forward name="success" path="/user/success.jsp"/>

                   <forward name="add" path="/user/addUser.jsp"/>

                   <forward name="update" path="/user/updateUser.jsp"/>

                   <forward name="list" path="/user/userList.jsp"/>

</action>

</action-mappings>

Eg2. input屬性的例子:

<action-mappings>

<action path="/calcAction"

type="com.amigo.struts.action.CalcAction"

name="CalcForm"

scope="request"

validate="true"

input="/index.jsp">

<forward name="success" path="/success.jsp"/>
<forward name="error" path="/error.jsp"/>

</action>

</action-mappings>

Eg3. 僅有JSPaction元素:

<action path="/menu"

parameter="/default.jsp"

type="org.apache.struts.actions.ForwardAction" />

首先,ActionServlet接到請求後調用ForwardActionexecute()方法,execute()根據配置的parameter屬性值來forward到那個URI

這樣做的效果是:沒有任何form被實例化,比較現實的情形可能是formrequest更高級別的範圍中定義;或者這個action被用作在應用程序編譯好後充當系統參數,只需要更改這個配置文件而不需要重新編譯系統。

5. message-resources

       該元素用來定義資源文件,格式如下:

<message-resources parameter="給定資源文件的全名"

classname="定義處理消息資源的類名的全名"

factory="定義MessageResourcesFactory類的全名"

key="定義綁定在這個資源包中的ServletContext的屬性主鍵"

null=" 如果爲true,則找不到消息key時,則返回null "/>

       message-resources的各屬性中,只有parameter是必選的,其餘都爲可選,classname屬性默認爲:org.apache.struts.config.MessageResourcesConfigfactory屬性默認爲:org.apache.struts.util.property.MessageResourcesFacotrykey屬性默認爲:Action.MESSAGES_KEYnull屬性默認爲:true

       舉例如下,在struts配置文件中添加如下信息:

Eg1. <message-resources parameter="ApplicationResources" />

Eg2. <message-resources

 parameter="com.amigo.struts. ApplicationResources "

null="false"/>

6. plug-in

       該元素用於定義插件,可定義0到多個插件元素,最常見的plug-inStruts的驗證的插件,配置舉例如下:

Eg1. Struts的驗證的plug-in

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

         <set-property property="pathnames"

                   value="/WEB-INF/validator-rules.xml, /WEB-INF/manager/validation.xml" />

         <set-property property="stopOnFirstError" value="false" />

</plug-in>

Eg2. Spring提供的載入插件配置:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

<set-property property="contextConfigLocation"

              value="/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml"/>

 </plug-in>

7. 完整配置實例

       本小節舉例說明struts-config.xml文件的配置:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

    <data-sources />

        <form-beans>

            <form-bean name="UserForm" type="com.amigo.struts.form.user.UserForm" />

         </form-beans>

    <global-exceptions />

    <global-forwards />

    <action-mappings>

        <action 

                path="/userAction" 

                type="com.amigo.struts.action.UserAction" 

                name="UserForm"

                scope="request"

                validate = "false"

                parameter="method" > 

             <forward name="error" path="/user/error.jsp" />

             <forward name="success" path="/user/success.jsp"/>

             <forward name="add" path="/user/addUser.jsp"/>

             <forward name="update" path="/user/updateUser.jsp"/>

             <forward name="list" path="/user/userList.jsp"/>

        </action>

    </action-mappings>

    <message-resources parameter="com.amigo.struts. ApplicationResources " />

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

        <set-property property="pathnames" 

                value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>

        <set-property property="stopOnFirstError" value="false" /> 

    </plug-in>

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