應用程序越大,它裏面action mapping的數量也越多,經過使用通配符,咱們能夠將一些類似的mapping綁在一塊兒,用一個比較通用的mapping來表示,在前面關於action配置的那章裏面也提到了這個通配符的使用,這裏再系統的說一下。web
以下所示,有一個配置好了的action mapping:apache
<actionapp
name="/edit*"框架
class="org.apache.struts.webapp.example.Edit{1}Action">webapp
<result name="failure"path="/mainMenu.jsp"/>jsp
<result path="/{1}.jsp"/>url
</action>spa
這個action mapping能夠用匹配全部以/edit開頭的對action名稱,例如/editSubscription,editRegistration等等,可是/editSubscription/add不會被匹配上。被通配符所匹配的內容將會被替換到action mapping以及result的各個屬性中去,去取代{1}。比方說/editSubscription匹配上了,那麼其中一個result的path屬性就會被框架認爲是Subscription.jsp。ip
要注意的是,若是一個請求的url和多個action mapping匹配上了,那麼選擇最後面的那個執行,也就是說按照從後往前的順序進行匹配查找,有一個例外就是精確匹配優先,若是有一個action mapping沒用通配符和url給匹配上了,那麼優先選擇精確匹配,摺合servlet中的匹配原則是同樣的。servlet
通配符中幾個特殊的標記,以下所述:
*:能夠匹配0個或多個任意字符,可是不包括正斜槓」/」;
**:能夠匹配0個或多個任意字符,包括正斜槓’’/」在內
/:反斜槓,轉義字符。
由於*不能匹配正斜槓,因此前面/editSubscription/add不會被匹配上。
在action mapping中,被通配符所匹配上的值能夠用符號{N}來訪問,其中N是一個1到9之間的數,用來表示代替第N個被匹配上的值,說通俗點就是第N個*號所表示的內容,比方說通配符表達式是/edit*/add*/confirm*,它匹配上了/editOrder/addItem/confirmResult,那麼{1}就表明Order,{2}就表明Item,{3}就表明Result,依此類推。