ActionMappings 通配字元


在Struts中,您所有關於請求轉發等的設定都是在struts-config.xml中定義,很快的,您的 struts-config.xml就會膨漲為好幾百行,甚至好幾千行。

您可以使用 模組化程式 的方式,將相關的功能設定加以分類,並撰寫在不同的struts-config-xxx.xml模組設定檔案中。

在Struts 1.2中新增了通配字元(wildcard)設定,您可以在struts-config.xml中使用通配字元,透過事前設計好的命名規範,加上通配字元設定,您可以大量的減少struts-config.xml中的設定行數。

以一個實際的例子來看,如果您本來的struts-config.xml中的設定是這樣的:
  • struts-config.xml
....
<action
path="/editProfile"
type="onlyfun.caterpillar.EditProfileAction"
name="profileForm"
scope="request"
validate="false">
<forward
name="failure"
path="/mainMenu.jsp"/>
<forward
name="success"
path="/profile.jsp"/>
</action>

<action
path="/editDocument"
type="onlyfun.caterpillar.EditDocumentAction"
name="documentForm"
scope="request"
validate="false">
<forward
name="failure"
path="/mainMenu.jsp"/>
<forward
name="success"
path="/document.jsp"/>
</action>
....

則在Struts 1.2中可以這麼撰寫就好了:
  • struts-config.xml
....
<action
path="/edit*"
type="onlyfun.caterpillar.Edit{1}Action"
name="{1}Form"
scope="request"
validate="false">
<forward
name="failure"
path="/mainMenu.jsp"/>
<forward
name="success"
path="/{1}.jsp"/>
</action>
....

如上設定,如果是edit開頭的請求,就會與通配字元比對,並將除去前綴部份字串作為查找Action的依據,例如 /editProfile.do就會查找EditProfileAction的action設定,而/editDocument.do就會查找 EditDocumentAction的action設定。

通配字元*最多可以設定九個,依序對應至{1}到{9},例如/edit*Profile*.do與edit{1}Profile{2}Action的關係。

設定{0}的話,表示會包括整個請求,即包括前綴,例如/edit*.do與Admin{0}Action的關係的一個例子是,在請求為 /editProfile.do時,會呼叫AdminEditProfileAction這個action。

通配字元設定主要包括以下:
* 比對一個或多個字元,不包括斜線 ('/') 字元
** 比對一個或多個字元,包括斜線 ('/') 字元
\character 反斜線字元被用於跳脫字元,所以 \* 會用於比對星號 ('*'),而 \ 比對反斜線 ('\').


目前Struts 1.2中 <action-mappings> 支持通配字元設定的屬性有:
  • type
  • name
  • roles
  • parameter
  • attribute
  • forward
  • include
  • input