版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106677301
文章目录
通过前两篇的博客,相信大家已经对 Struts2 这款框架有了更深入的了解,本篇主要介绍 Struts2 的执行流程及对 Action 的写法和访问。
一、执行流程
当用户访问某一个 Action 时,会先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器会实现部分功能,关于拦截器后续博客会有专门讲解),然后执行目标 Action 中的方法,最后根据 Action 的返回值,进行结果页面跳转。如图:
二、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>