struts2中Action配置之通配符配置

本文介绍如何在Struts2框架中使用通配符进行Action配置,通过这种方式可以简化配置文件并提高代码的可读性和维护性。文章详细解释了通配符配置的规则及其在实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用struts2时,每一个action都需要配置,每一个action里面的方法以及其返回到的界面都需要配置,如果一个一个配置,就太麻烦了,这里我们可以约定一些命名规范,然后再struts.xml里面使用通配符配置。

通配符配置的好处:在做项目时,不可能一个action类只处理一个业务(因为这样降低了代码的可读性),所以项目中一个action可能要处理很多个业务,这时如果每个业务都要配置一个<action></action>就会很麻烦,会降低代码可读性。这时就可使使用通配符来配置。通配符配置action其实是一种动态调用。

先看一段Action里面的struts.xml的配置:

 <!-- 常量配置 -->
    <constant name="struts.i18n.reload" value="false"></constant>
    <constant name="struts.devMode" value="false"></constant>
    <!-- 包含文件配置 -->
    <!-- <include file="struts-user.xml"></include> -->
    <!-- 配置包元素 -->
    <package name="default" extends="struts-default" namespace="/">
      <interceptors>  <!-- 拦截器根元素 -->
        <interceptor-stack name="crudStack"><!-- 拦截器栈 -->
          <!-- 拦截器 -->
          <interceptor-ref name="checkbox"></interceptor-ref>
          <interceptor-ref name="params"></interceptor-ref>
        </interceptor-stack>
      </interceptors>
 
      <!--其中所说的通配符配置,主要是针对这一部分使用通配符-->
      <action name="login" class="com.web.action.LoginAction">
        <result name="success">/success.jsp</result>
        <result name="index">/index.jsp</result>
      </action>
    </package>
举个例子:

<package name="default" extends="struts-default" namespace="/">
      <action name="login_*" class="com.web.action.LoginAction" methiod=“{1}”>
        <result name="success">/login_{1}.jsp</result>
      </action>
</package>
本例子的解释:

1、“login_*”:login_之后可以匹配任意字符,比如:login_add;
2、method=“{1}":表示method属性值匹配第一个 “*” 的内容。比如:name="login_add",则method="add";
3、login_{1}.jsp:这里的{1}跟method=“{1}"中是一样的。
注意:这里的name属性值只有一个  *  ,还可以有两个、三个、甚至跟多,比如有两个。写成name=“*_*”;此时可以使用{1}代表第一个 *,{2}代表第二个 *。


涉及到通配符配置的还有一个问题:就是当一个struts.xml里面有两个配置都可以和当前的请求匹配时,程序该执行哪一个呢?这就涉及到执行优先级问题。

例如以下情况:

<package name="default" extends="struts-default" namespace="/">
      <action name="*" class="com.web.action.LoginAction" methiod=“{1}”>
        <result name="success">/login_{1}.jsp</result>
      </action>

      <action name="login_*" class="com.web.action.LoginAction" methiod=“{1}”>
        <result name="success">/login_{1}.jsp</result>
      </action>

      <action name="login_add" class="com.web.action.LoginAction" methiod=“{1}”>
        <result name="success">/login_{1}.jsp</result>
      </action>
</package>
检索顺序:
如果能找到name属性与请求的action名称完全一致的action时,就直接匹配那个完全一致的action。如:如果请求的action名称是login_add,就不会再使用通配符去匹配,而直接匹配name="login_add"的action。
如果找不到name属相与请求的action名称完全一致的action时,就按照顺序匹配。比如:请求的action名称是
login_del,找不到name=“login_del”的action,就会按照顺序匹配,就会匹配到name=“*”的action。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值