Struts 2 通配符的使用
在我們配置Action時,發現struts.xml中的<action…/>的絕大部分都相同。這時我們可以通過使用struts 2 提供的通配符映射機制來處理這個問題。
我們在配置<action …./>時,允許在指定name屬性時使用模式字符串(即用“*”來代替一個或多個任意字符),接下來就可以再class、method屬性和<result…/>中使用{N}的形式來代表前面第幾個*所代表是字符。
1、 當我們在Action的name屬性中使用通配符后,可以用一個<action../>元素代替多個邏輯Action。
<action name="*action" class="com.app.action.LoginAction" method="{1}">
上面定義了一個一系列的邏輯Action。即只要用戶請求的URL=*Action模式,都可以使用該Action。對于method屬性,使用的是:{1}。表示該表達式的值就是name屬性值中的第一個*的值。如用戶請求的URL為RegistAction。則調用RegistAction類中的regist方法。
2、 <action .../>的class屬性也可以使用{N}表達式。即struts 2允許將一系列的Action配置成一個<action .../>元素。相當于一個<action .../>元素配置了多個邏輯Action
<action name="*Action" class="com.app.action.{1}Action">
上面的struts.xml中 class屬性值使用了{N}形式的表達式。這個表達式表示了:如果RUL為LoginAction的請求,其中第一個*為Login,即這個Action的處理類為LoginAction。指定處理方法為默認的execute()方法
根據上面的描述:可以判斷下面的struts.xml的配置
<actiion name="*_*" method="{1}" class="com.app.actions.{2}" >
上面的Action模式為**_*,所以只要匹配了這個模式的請求,都可以被該Action處理。如果有一個URL為Regist_Login.action。因為匹配了*_*請求,而且第一個*為Regist,第二個為Login。則意味著調用com.app.action.Login處理類的Regist方法來處理這個請求。