struts2访问action的三种方式

第一种,循规蹈矩式:

<a href="${pageContext.request.contextPath}/addUser">添加用户~</a>
<a href="${pageContext.request.contextPath}/updateUser">更新用户</a>
<a href="${pageContext.request.contextPath}/removeUser">删除用户</a>
<a href="${pageContext.request.contextPath}/queryUser">查询用户</a>
               <package name="user" extends="struts-default">
			<action name="addUser" class="com.dimples.action.UserAction" method="addUser">
				<result name="success" type="dispatcher">/success.jsp</result>
			</action>
			<action name="updateUser" class="com.dimples.action.UserAction" method="updateUser">
				<result name="success" type="dispatcher">/success.jsp</result>
			</action>
			<action name="removeUser" class="com.dimples.action.UserAction" method="removeUser">
				<result name="success" type="dispatcher">/success.jsp</result>
			</action>
			<action name="queryUser" class="com.dimples.action.UserAction" method="queryUser">
				<result name="success" type="dispatcher">/success.jsp</result>
			</action>
		</package>
package com.dimples.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
		//新增一个用户
		public String addUser() {
			System.out.println("新增了一个用户");
			return SUCCESS;
		}
		
		//修改一个用户
		public String updateUser() {
			System.out.println("更新了一个用户");
			return SUCCESS;
		}
		
		//删除一个用户
		public String removeUser() {
			System.out.println("删除了一个用户");
			return SUCCESS;
		}
		
		//查询一个用户
		public String queryUser() {
			System.out.println("查询用户");
			return SUCCESS;
		}
		
}

解析:这种就是jsp中的结尾跟struts.xml中<action>标签的name对上,然后类名方法名都指定好,没什么好说。

第二种:通配符方式(动作类和上面都是一样的,就不再截图了)

<a href="${pageContext.request.contextPath}/add_User">添加用户~</a>
<a href="${pageContext.request.contextPath}/update_User">更新用户</a>
<a href="${pageContext.request.contextPath}/remove_User">删除用户</a>
<a href="${pageContext.request.contextPath}/query_User">查询用户</a>
<package name="user" extends="struts-default">
	<action name="*_*" class="com.dimples.action.{2}Action" method="{1}{2}">    //这里的{1}代表第一个 * 的值
		<result name="success">/success.jsp</result>
	</action>
</package>

解析:可以看到,这种方式先通过*_*将jsp中的结尾匹配到,然后将"_"左右到字符串分别存到第一、第二个 * 中,在后面的class 和 method属性中再用 * 将值取出来,从而巧妙的找到了对应的类和方法。仔细想想,其实这种方式本质就是在jsp的结尾中就把类和方法的信息都写进去了,然后在后面存到 * 里面去,以至于后面可以取的到。这种方法的好处就是当配置太多时,通过合理设计jsp中的结尾和类名及方法名,可以极大减少代码量!

当然,如果只需要往 * 里面存方法名而不需要存类名,那么一个*就够了,比如下面这样:

<a href="${pageContext.request.contextPath}/addUser">添加用户~</a>
<a href="${pageContext.request.contextPath}/updateUser">更新用户</a>
<a href="${pageContext.request.contextPath}/removeUser">删除用户</a>
<a href="${pageContext.request.contextPath}/queryUser">查询用户</a> 
<package name="user" extends="struts-default">
	<action name="*" class="com.dimples.action.UserAction" method="{1}">    //这里的{1}代表第一个 * 的值
		<result name="success">/success.jsp</result>
	</action>
</package>

这种情况就是类名已经确定了,写死了。

第三种:动态方法调用

<a href="${pageContext.request.contextPath}/user!addUser">添加用户~</a>
<a href="${pageContext.request.contextPath}/user!updateUser">更新用户</a>
<a href="${pageContext.request.contextPath}/user!removeUser">删除用户</a>
<a href="${pageContext.request.contextPath}/user!queryUser">查询用户</a>
<!--开启动态方法模式 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

<package name="user" extends="struts-default">
	<action name="user" class="com.dimples.action.UserAction">
		<result name="success">/success.jsp</result>
	</action>
</package>

解析:首先用这种方式一定要先配置一下 struts.enable.DynamicMethodInvocation = true.这种方式要点其实也在于jsp的结尾,它在jsp结尾就把方法名写上了,然后类名在struts.xml中写好了,通过jsp结尾中叹号前面的字符找到对应action,然后类名和方法名都知道了,还怕调不到方法?







  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值