【Struts2笔记整理三】执行流程与对Action的访问

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106677301







通过前两篇的博客,相信大家已经对 Struts2 这款框架有了更深入的了解,本篇主要介绍 Struts2 的执行流程及对 Action 的写法和访问。


一、执行流程

当用户访问某一个 Action 时,会先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器会实现部分功能,关于拦截器后续博客会有专门讲解),然后执行目标 Action 中的方法,最后根据 Action 的返回值,进行结果页面跳转。如图:

03执行流程



二、Action 的写法及访问

了解了 Struts2 的执行流程后,我们再详细给大家介绍几种 Action 的写法和访问。

1、Action 写法

1)方式一:POJO 类

Action 类写成 POJO 类。

/**
 * Action 的编写方式一:把 Action 类写成 POJO 类。
 */
public class ActionDemo1 {
	public String execute() {
		System.out.println("ActionDemo1 执行了....");
		return null;
	}
}

2)方式二:实现 Action 接口

/**
 * Action 的编写方式二:实现 Action 接口
 *
 * 这个接口提供了五个常量(五个逻辑视图的名称):
 * 		1. SUCCESS:成功
 * 		2. ERROR:失败
 * 		3. LOGIN:登录出错,页面跳转
 * 		4. INPUT:表单校验的时候出错,或者类型转换出错
 * 		5. NONE:不跳转
 */
public class ActionDemo2 implements Action {
	@Override
	public String execute() throws Exception {
		System.out.println("ActionDemo2 执行了....");
		return NONE;
	}
}

3)方式三:继承 ActionSupport 类(推荐)

/**
 * Action 的编写方式三:继承 ActionSupport 类
 *
 * 推荐使用这种方式,因为这个类有很多的功能,它提供了数据校验、国际化等一系列操作的方法。
 */
public class ActionDemo3 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		System.out.println("ActionDemo3 执行了...");
		return NONE;
	}
}

2、Action 访问

1)方式一:通过 method 设置

  • 编写 JSP

    <body>
    	<h1>Action的访问</h1>
    	<h3>通过method的方式</h3>
    	<a href="${ pageContext.request.contextPath }/userFind.action">查询用户</a><br>
    	<a href="${ pageContext.request.contextPath }/userUpdate.action">修改用户</a><br>
    	<a href="${ pageContext.request.contextPath }/userDelete.action">删除用户</a><br>
    	<a href="${ pageContext.request.contextPath }/userSave.action">保存用户</a><br>
    </body>
    
  • Struts2 配置

    <package name="demo3" extends="struts-default" namespace="/">
    	<action name="userFind" class="com.demo3.UserAction" method="find"></action>
    	<action name="userUpdate" class="com.demo3.UserAction" method="update"></action>
    	<action name="userDelete" class="com.demo3.UserAction" method="delete"></action>
    	<action name="userSave" class="com.demo3.UserAction" method="save"></action>
    </package>
    

2)方式二:通过通配符的方式进行配置(推荐)

  • 编写 JSP

    <body>
    	<h1>Action的访问</h1>
    	<h3>通过通配符的方式</h3>
    	<a href="${ pageContext.request.contextPath }/user_find.action">查询用户</a><br>
    	<a href="${ pageContext.request.contextPath }/user_update.action">修改用户</a><br>
    	<a href="${ pageContext.request.contextPath }/user_delete.action">删除用户</a><br>
    	<a href="${ pageContext.request.contextPath }/user_save.action">保存用户</a><br>
    </body>
    
  • Struts2 配置

    <package name="demo3" extends="struts-default" namespace="/">
        <!-- 通配符的方式 -->
        <!-- 这里的1代表是第1个通配符的取值 -->
        <action name="user_*" class="com.demo3.UserAction2" method="{1}"></action>
    </package>
    
  • 通配符更抽象写法:

    <action name="*_*" class="xxx.{1}" method="{2}"></action>
    

    直接访问:/UserAction_save 路径即可。


3)方式三:动态方法访问

Struts2 的动态方法访问默认是关闭的,所以我们需要先在配置文件中开启动态方法访问。

  • 开启动态方法访问

    <!-- 开启动态方法访问 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    
  • 编写 JSP

    <body>
    	<h1>Action的访问</h1>
    	<h3>通过动态方法访问的方式</h3>
    	<!-- 执行 user Action 中的 find 方法 -->
    	<a href="${ pageContext.request.contextPath }/user!find.action">查询用户</a><br>
    	<a href="${ pageContext.request.contextPath }/user!update.action">修改用户</a><br>
    	<a href="${ pageContext.request.contextPath }/user!delete.action">删除用户</a><br>
    	<a href="${ pageContext.request.contextPath }/user!save.action">保存用户</a><br>
    </body>
    
  • Struts2 配置

    <!-- 动态方法访问的方式 -->
    <action name="user" class="com.demo3.UserAction3"></action>
    


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小异常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值