Struts中配置通配符
原理:当有addUser.action请求时,如果不能在当前应用中找到完全相同的addUser名字的Action时,通配符配置这时就起作用了,按通配原则,它便和上面的name=“User”相配成功,这里不难明了此时代指的内容是add,再来看method恰恰是引用第一个的内容,所以它的method此时的完整名为addUser,它刚好和com.asmUserAction中的addUser方法相对,所以它会去addUser方法,再来看下面的result配置所指代的页面,它也用到了{1},所以它的完整页面是/addUser.jsp。其实如果我们有良好的编程命名习惯,所有的Action我们都只需要进行一次配置。*举例:规定所有的Action类都用XXXAction来命名,类中所有的CRUD方法都用add/del/update/query。Jsp页面也用add/del/update/query_XXX.jsp这样的形式。即配置文件可以写成如下形式: <action name=“_“ class=“com.asm.{2}Action”method=“{1}”></action>
<font style="color:teal;"><</font><font style="color:rgb(63, 127, 127);">result </font><font style="color:rgb(127, 0, 127);">name</font>=<font style="color:rgb(42, 0, 255);">"success"</font><font style="color:teal;">></font>{1}_{2}.jsp<font style="color:teal;"></</font><font style="color:rgb(63, 127, 127);">result</font><font style="color:teal;">></font>
Name中第一个代表CRUD操作的名字,第二个代表类的名字。
工程 LinkSSH 中的代码
<!-- User模块 -->
<!-- user_*访问请求的通配,method={1}指请求中第一个通配符 -->
<action name="user_*" class="loginAction" method="{1}">
<result name="loginOK" type="redirect">/index.jsp</result>
</action>
<!-- Customer模块 -->
<action name="customer_*" class="customerAction" method="{1}">
<result name="success">/jsp/success.jsp</result>
<result name="list">/jsp/customer/list.jsp</result>
<result name="edit">/jsp/customer/edit.jsp</result>
<interceptor-ref name="userInterceptor" />
<interceptor-ref name="defaultStack" />
</action>
<!-- 联系人模块 -->
<action name="linkman_*" class="linkManAction" method="{1}">
<result name="success">/jsp/success.jsp</result>
<result name="list">/jsp/linkman/list.jsp</result>
<result name="edit">/jsp/linkman/edit.jsp</result>
<interceptor-ref name="userInterceptor" />
<interceptor-ref name="defaultStack" />
</action>
<!-- 使用通配符合并上面的两个模块 -->
<!-- 补充说明{0}是代表name中所有的*组合。 -->
<action name="*_*" class="{1}Action" method="{2}">
<result name="success">/jsp/success.jsp</result>
<result name="list">/jsp/{1}/list.jsp</result>
<result name="edit">/jsp/{1}/edit.jsp</result>
<interceptor-ref name="userInterceptor" />
<interceptor-ref name="defaultStack" />
</action>