Struts2的请求访问方式

Struts2的请求访问方式

  • 问题:以上的代码,每一个请求,就对应一个,那么100个请求,就要配置100个。
    这样配置很麻烦。

  • 想法:能不能就使用一个接收同一个包所有的请求。

答:是可以的。==有两种方式实现。==
1. 通配符
2. 动态方法调用

  • 动态方法的调用要注意ico优化
    • 也就是地址栏的访问路径要简洁

使用*通配符实现(推荐使用)

action的name属性可以使用 * 通配符匹配请求路径的参数。
1. * 号会自动匹配,请求路径对应的值
如:user/user_login 改成 user_* 星号的值为login

  1. action标签除了name属性以外的任何属性以及子标签的任何属性都可以使用 {下标} 调用 * 的值。
    如:user_* 中通过 {1} 获得星号的值。 下标1开始
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "struts-2.3.dtd" >
<struts>
    <!-- 配置一个<action> 对应多个请求 -->
    <!-- 声明一个表,用于配置用户模块的请求 -->
    <package name="user" extends="struts-default" namespace="/user">
        <!-- 
          action的name属性可以使用*通配符匹配请求路径的参数。
            (1)*号会自动匹配,请求路径对应的值
            如:user/user_login  ->  user_* 星号的值为login
            (2)action标签除了name属性以外的任何属性以及子标签的任何属性都可以使用{下标}调用*的值。
            如:user_*  ->通过 {1}获得星号的值。 下标1开始
         -->
        <action name="user_*" class="com.action.UserAction"
            method="{1}">
            <!-- <result name="{1}">/{1}.jsp</result> -->
            <result name="login">/login.jsp</result>
            <result name="register">/register.jsp</result>
            <result name="undo">/undo.jsp</result>
        </action>

    </package>
</struts>
访问路径url

在命名空间后面写上 _方法名 (下划线和方法名)来访问(如果加了后缀名也要加上)

格式:action标签名_方法名 ==(下划线可以去掉或者换成其他的)==

<body>
  <a href="${pageContext.request.contextPath }/user/userAction_login.action">用户登录</a>
  <a href="${pageContext.request.contextPath }/user/userAction_register">用户注册</a>
</body>

动态方法调用

  • 作用:和通配符是一样的。就是实现使用一次的标签的配置,就可以调用多个执行方法

  • 说明
    就是标签不指定调用的方法,通过请求的URL指定

如:请求的URL:userAction!login.action

格式:action标签名!方法名

访问路径url
<body>
  <a href="${pageContext.request.contextPath }/user/userAction!login.action">用户登录</a>
  <a href="${pageContext.request.contextPath }/user/userAction!register">用户注册</a>
</body>
配置文件 struts2.xml
  • 配置环境参数,设置为true
  • 然后method属性就不需要写了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "struts-2.3.dtd" >
<struts>
    <!-- 动态方法调用,版本2.3以后默认已经关闭 ,所以要使用先开启-->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <!-- 配置一个<action> 对应多个请求 -->
    <package name="user" extends="struts-default" namespace="/user">
        <!-- 
            动态方法调用:不指定方法,由URL来指定方法
         -->
        <action name="userAction" class="com.action.UserAction"
            >
            <!-- <result name="{1}">/{1}.jsp</result> -->
            <result name="login">/login.jsp</result>
            <result name="register">/register.jsp</result>
            <result name="undo">/undo.jsp</result>
        </action>

    </package>
</struts>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值