struts配置引數詳解

沙漏無語發表於2014-08-26

Struts-config.xml配置檔案講解

1.<struts-config>元素:struts配置檔案的根元素。(和它對應的配置類為org.apache.struts.config.MouleConfig類)

      8個子元素:(先後順序不能變)            

              <data-sources>,
              <form-beans>,
              <global-exceptions>,
              <global-forwards>,
              <action-mappings>,
              <controller / >,
               <message-resources / >,
               <plug-in />。

2.<data-sources>元素:用來配置應用所需要的資料來源。

    包含0,1或者多個<data-source>元素,該元素用於配置特定的資料來源。<data-source>元素包含多個<set-property>元素,<set-property>元素用於設定資料來源的各種屬性。

 Example:

<span style="font-family:Comic Sans MS;font-size:14px;">    <data-sources>
        <data-source type=”org.apache.commons.dbcp.BasicDataSource”>
            <set-property property=”autoCommit” value=”true”/>
            <set-property property=”description” value=”MYSQL Data Source”/>
            <set-property property=”driverClass” value=”com.mysql.jdbc.Driver”/>
            <set-property property=”maxCount” value=”10”/>
            <set-property property=”minCount” value=”2”/>
            <set-property property=”user” value=”root”/>
            <set-property property=”password” value=””/>
            <set-property property=”url” value=”jdbc:mysql://localhost:3306/資料庫名稱”/>
        </data-source>
    </data-sources></span>

配置了資料來源後,就可在Action類中訪問資料來源了

Javax.sql.DataSource dataSource = getDataSource(request);

Javax.sql.Connection myConnection = dataSource.getConnection();

配置多個資料來源: 

 <data-source key=”A” type=”org.apache.commons.dbcp.BasicDataSource”>
       …property as before…
  </data-source>
<data-source key=”B” type=”org.apache.commons.dbcp.BasicDataSource”>
         …property as before…
    </data-source>

在Action中取得資料來源:  

  dataSourceA = getDataSource(request,”A”);
   dataSourceB = getDataSource(request,”B”);

3.<form-beans>元素:用來配置多個ActionForm Bean。

    包含<form-bean>元素,該元素的屬性有:

    1.className:指定和<form-bean>元素對應的配置類,預設值為org.apache.struts.config.FormBeanConfig。如果在這裡設定自定義類,則該類必須擴充套件FormBeanConfig類。

    2.name:指定該ActionForm的唯一識別符號,整個struts框架利用該識別符號來引用這個bean。(必需的)

    3.type:指定ActionForm類的完整實現類名(包括路徑)。(必需的)

    Example1:

          <form-bean name="UserLoginForm"

                        type="com.free.web.struts.form.UserLoginForm">

           </form-bean>

Example2(動態ActionForm):

<!-- sample form bean descriptor for a DynaActionForm
        <form-bean
            name="logonForm"
            type="org.apache.struts.action.DynaActionForm">
            <form-property
                name="username"
                type="java.lang.String"/>
            <form-property
                name="password"
                type="java.lang.String"/>
       </form-bean>

4.<global-exceptions>元素:用於配置異常處理類。

  包含多個<exception>元素:用來設定java異常和異常處理類org.apache.struts.action.ExceptionHandler之間的對映。

   屬性:className:指定和<exception>元素對應的配置類。預設值為org.apache.struts.config.ExceptionConfig。

            Handler:指定異常處理類。預設值為org.apache.struts.action.ExceptionHandler。

            Key:指定在Resource Bundle中描述該異常的訊息key。

            Path:指定當一場發生時的轉發路徑。

            Scope:指定ActionMessages例項的存放範圍,可選值包括request和session。預設值為request。

            Type:指定所需處理的異常類的名稱。(必需的)

            Bundle:指定Resources Bundle。

         Example:           

 <global-exceptions>
                 <exception
                      key="expired.password"
                      type="app.ExpiredPasswordException"
                      path="/changePassword.jsp"/>
            </global-exceptions>

5.<global-forwards>元素:用來宣告全域性的轉發關係。

  包含多個<forward>元素,<forward>元素用於把一個邏輯名對映到特定的URL。

  屬性:className:指定和<forward>元素對應的配置類。預設值為org.apache.struts.action.ActionForward。

           contextRelative:如果此項為true,表示當path屬性以”/”開頭時,給出的是相對於當前上下文的URL。預設值為false。

           Name:轉發路徑的邏輯名。(必需的)

           Path:指定轉發或重定向的URL。(必需的)而且必須以”/”開頭。contextRelative為true時,表示URL路徑相對於當前上下文(context-ralative); contextRelative為false時,表示URL路徑相對於當前應用(application-ralative);

            Redirect:此項為true,執行重定向操作;為false,執行請求轉發操作。

   Example:      

     <global-forwards>
           <!-- Default forward to "Welcome" action -->
           <!-- Demonstrates using index.jsp to forward -->
           <forward
                name="welcome"
                path="/Welcome.do"/>
           </global-forwards>

   如果.jsp檔案把請求轉發給Action,可以使用一下程式碼:

         <html:link forward=”forward1”>

   如果Action把請求轉發給.jsp檔案,可以使用一下程式碼:

           Return (mapping.findForward(“forward2”));

6.<action-mappings>元素:包含<action>元素,描述了從特定的請求路徑到相應的Action類的對映。

在<action>元素中可以包含多個<exception>和<forward>元素,它們分別配置區域性的異常

處理及請求轉發僅被當前的Action所訪問。

屬性:

(1)      attribute: 設定和Action關聯的ActionForm Bean在request或session範圍內的屬性key。例如,假定Form Bean存在於request範圍內,並且此項設定為”myBean”,那麼request.getAttribute(“myBean”)就可以返回該Bean的例項。

(2)      className:和<Action>元素對應的配置元素。預設值為org.apache.struts.action.ActionMapping。

(3)      forward:指定轉發的URL路徑。

(4)      includes:指定包含的URL路徑。

(5)      input:指定包含輸入表單的URL路徑。當表單驗證失敗時,將把請求轉發到該URL。

(6)      name:指定和該Action關聯的ActionForm Bean的名字。該名字必須在<form-bean>元素中一定過。

(7)      path:指定訪問Action的路徑,它以”/”開頭,沒有副檔名。

(8)      parameter:指定Action的配置引數。在Action類的execute()方法中,可以呼叫ActionMapping物件的getParamter()方法來讀取該配置引數。

(9)      roles:指定允許呼叫該Action的安全形色。多個角色之間以逗號隔開。在處理請求時,RequestProcessor會根據該配置項來決定使用者是否有呼叫Action的許可權。

(10)  scope:指定ActionForm的存在範圍。可選值為request和session。預設為session

(11)  type:指定實現該Action類的真實類的路徑和名稱。(完整類名)

(12)  unknown:如果此項為true,表示可以處理使用者發出的所有無效的ActionURL。預設值為false。

(13)  validate:指定是否要先呼叫ActionForm Bean的validate()方法。預設為true

<Action>元素的forward,includes,type屬性相互排斥(即只能設定其中一項)。

Example: 

        <Action   path=”/search”
                   type=”addressbook.actions.SearchAction”
                   name=”searchForm”
                   scope=”request”
                   validate=”true”
                   input=”/search.jsp”>
                   <forward name=”success” path=”/display.jsp”/>
          </action>

注意:區域性<forward>元素和<exception>元素的優先順序大於全域性的。

7.<controller>元素:用於配置ActionServlet。

  屬性:

(1)      bufferSize:指定上載檔案的輸入緩衝的大小。預設值:4096

(2)      calssName:指定和<controller>元素對應的配置類。預設值為org.apache.struts.config.ControllerConfig。

(3)      contentType:指定響應結果的內容型別和字元編碼。預設值為text/html。如果在Action或jsp網頁中也設定了內容型別和字元編碼,將會覆蓋該設定。

(4)      locale:指定是否把Locale物件儲存到當前使用者的session中。預設值false

(5)      processorClass:指定負責處理請求的Java類的完整類名。預設值為org.apache.struts.action.RequestProcessor。或者擴充套件了該類的自定義類。

(6)      tempDir:指定處理檔案上載的臨時檔案目錄。如果沒有設定此項,將採用Servlet容器為Web應用分配的臨時工作目錄。

(7)      nochache:如果為true,在響應結果中將加入特定的頭引數:pragma,cache-control和Expires,防止頁面被儲存在客戶瀏覽器的快取中。預設值為false。

Example:

       <controller  
         contentType=”text/html;charset=UTF-8”
         locale=”true”
         processorClass=”CustomRequestProcessor”/>

8.<message-resources>元素:用來配置resource bundle,resource bundle用於存放本地化訊息文字。

  屬性:

(1)      className:和.<message-resources>元素對應的配置類。預設值為org.apache.struts.config.MessageResourcesConfig

(2)      factory:指定訊息資源的工廠類。預設值為org.apache.struts.util.property.MessageResourcesFacotry

(3)      key:繫結在這個資源包中的ServletContext的屬性主鍵,預設值是Action.MESSAGES_KEY.

(4)      Null:指定MessageResources類如何處理未知的訊息key。如果此項為true,將返回空字串。如果為false,將返回類似”???global.label.missing???”的字串,預設值為true

(5)      Parameter:指定recourse bundle的訊息資原始檔名。該路徑相對於WEB-INF/classes而言。

Example:

         <message-resources parameter="MessageResources" />

9.<plug-in>元素:用於配置struts外掛。

  屬性:className:指定struts外掛類。該外掛類必須實現org.apache.struts.action.PlugIn介面。

  Example:

   (1)<plug-in className="org.apache.struts.tiles.TilesPlugin" >     

    <span style="font-family:Comic Sans MS;font-size:14px;"><plug-in className="org.apache.struts.tiles.TilesPlugin" ></span><span style="font-family: 'Comic Sans MS';font-size:14px; "> </span><wbr style="font-family: 'Comic Sans MS';font-size:14px; "><span style="font-family: 'Comic Sans MS';font-size:14px; "> </span><wbr style="font-family: 'Comic Sans MS';font-size:14px; "><span style="font-family: 'Comic Sans MS';font-size:14px; "> </span><wbr style="font-family: 'Comic Sans MS';font-size:14px; "><span style="font-family: 'Comic Sans MS';font-size:14px; "> </span><wbr style="font-family: 'Comic Sans MS';font-size:14px; "><span style="font-family: 'Comic Sans MS';font-size:14px; "> </span><!-- Path to XML definition file -->
      <set-property property="definitions-config"  value="/WEB-INF/tiles-defs.xml" />
      <!-- Set Module-awareness to true -->
      <set-property property="moduleAware" value="true" />
    </plug-in></wbr></wbr></wbr></wbr>


   (2)

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

struts-config.xml

  1. <action path="/login" type="com.jialin.LoginAction" name="userForm"  
  2.    scope="request" validate="true" attribute="uf">  
  3.    <forward name="success" path="/LoginSuccess.jsp" />  
  4.    <forward name="fail" path="/LoginFail.jsp" />  
  5.   </action>  


其中 validate和attribut有什麼用?

 

validate,是否驗證表單資料。

我們在ActionForm中,重寫父類的validate方法,當從表單收集完資料放到ActionForm後,如果配置檔案中validate=true,將呼叫該方法,這裡我們可以做一些資料驗證。

  1. @Override  
  2. public ActionErrors validate(ActionMapping mapping,  
  3.         HttpServletRequest request) {  
  4.     System.out.println("-------ActionForm.validate()從表單收集完資料放到ActionForm後做驗證--------");  
  5.     return super.validate(mapping, request);  
  6. }  


當然,如果系統安全性各方面要求不高,我們一般的驗證都是放在javascript裡的。

 

attribute

如果我們配置了attribute屬性,我們在jsp中要獲取actionform中的值得時候,form名就變為attribute設定的值。而不再是form-bean節點下 name屬性的值。

例如

  1. <struts-config>  
  2.     <!-- set ActionForm info-->  
  3.     <form-beans>  
  4.         <form-bean name="userForm" type="com.jialin.UserActionForm" />  
  5.     </form-beans>  
  6.   
  7.     <action-mappings>  
  8.         <!-- Set path,action,actionform,scope,forward info -->  
  9.         <action path="/login" type="com.jialin.LoginAction" name="userForm"  
  10.             scope="request" validate="true" attribute="uf">  
  11.             <forward name="success" path="/LoginSuccess.jsp" />  
  12.             <forward name="fail" path="/LoginFail.jsp" />  
  13.         </action>  
  14.     </action-mappings>  
  15.   
  16. </struts-config>  


如果我們要用el表示式取表單的值,不能使用${userForm.name},而是${uf.name}

 

ActionForm中還可以重寫父類的reset的方法,可以在把收集表單資料往ActionForm中放之前做一些處理

  1. @Override  
  2.     public void reset(ActionMapping mapping, HttpServletRequest request) {  
  3.         System.out.println("------------ActionForm.reset()<span style="font-family:Calibri;">可以</span><span lang="zh-CN" style="font-family:宋體;">在把收集表單資料往</span><span lang="en-US" style="font-family:Calibri;">ActionForm</span><span lang="zh-CN" style="font-family:宋體;">中放之前做一些處理</span>-----------");  
  4.     }  

 

 

相關文章