Struts2的请求访问方式
问题:以上的代码,每一个请求,就对应一个,那么100个请求,就要配置100个。
这样配置很麻烦。想法:能不能就使用一个接收同一个包所有的请求。
答:是可以的。==有两种方式实现。==
1. 通配符
2. 动态方法调用
- 动态方法的调用要注意ico优化
- 也就是地址栏的访问路径要简洁
使用*通配符实现(推荐使用)
action的name属性可以使用 *
通配符匹配请求路径的参数。
1. *
号会自动匹配,请求路径对应的值
如:user/user_login
改成 user_*
星号的值为login
- 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>