在struts2中有三种方式创建action处理类。
action的创建方式
通过实现Action接口来创建Action处理类
该方式可以直接使用action提供的常量
SUCCESS
等,不需要Action.SUCCESS
;
该方式必须重写默认处理方法;
- web.xml
复制代码
1
2
3
4
5
6
7
8
9
10<!-- struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
- 处理类
复制代码
1
2
3
4
5
6
7
8
9
10
11package com.x.action; import com.opensymphony.xwork2.Action; public class HelloAction implements Action{ public String execute() throws Exception { System.out.println("action的处理类被执行"); return SUCCESS; } }
- struts.xml
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="com.x.action.HelloAction"> <result name="success">/index.jsp</result> </action> </package> </struts>
- 页面
复制代码
1
2
3
4<body> action被执行 </body>
通过继承ActionSupport类来创建action的处理类(推荐)
ActionSupport实现类Action接口,并且提供了很多其他的struts2提供的功能。比如:数据校验,国际化。默认实现execute方法。
- web.xml
复制代码
1
2
3
4
5
6
7
8
9
10<!-- struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
- 处理类
复制代码
1
2
3
4public class Hello1Action extends ActionSupport{ }
- struts.xml
复制代码
1
2
3
4
5
6
7
8<struts> <package name="default" namespace="/" extends="struts-default"> <action name="hello1" class="com.x.action.Hello1Action"> <result name="success">/index.jsp</result> </action> </package> </struts>
无侵入性的实现
- web.xml
复制代码
1
2
3
4
5
6
7
8
9
10<!-- struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
- 处理类
复制代码
1
2
3
4
5
6
7
8
9package com.x.action; public class Hello2Action { public String execute() { System.out.println("无侵入性实现"); return "success"; } }
- struts.xml
复制代码
1
2
3
4
5
6
7
8<struts> <package name="default" namespace="/" extends="struts-default"> <action name="hello2" class="com.x.action.Hello2Action"> <result name="success">/index.jsp</result> </action> </package> </struts>
action的配置优化
在struts2中,随着业务的增加,action的配置文件会急剧增加,导致了配置文件膨胀的问题。struts2提供了3中方式解决这个问题。
传统方式
- web.xml
复制代码
1
2
3
4
5
6
7
8
9
10<!-- struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
- 处理类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class UserAction { //增加 public String save() { return Action.SUCCESS; } //删除 public String delete() { return Action.SUCCESS; } //修改 public String update() { return Action.SUCCESS; } //查找 public String find() { return Action.SUCCESS; } }
- sturts.xml
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<struts> <package name="default" namespace="/" extends="struts-default"> <action name="save" class="com.x.action.UserAction" method="save"> <result type="redirectAction">find</result> </action> <action name="delete" class="com.x.action.UserAction" method="delete"> <result type="redirectAction">find</result> </action> <action name="update" class="com.x.action.UserAction" method="update"> <result type="redirectAction">find</result> </action> <action name="find" class="com.x.action.UserAction" method="find"> <result>/list.jsp</result> </action> </package> </struts>
通过动态方法调用来优化
第一步:开启动态方法调用;
第二步:配置action,一个action处理类只需配置一次即可,不需要配置处理方法;
第三步:调用处理方法:
ActionName!methodName.action
,如:localhost:8080/项目名/userAction!find.action
;
- web.xml
复制代码
1
2
3
4
5
6
7
8
9
10<!-- struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
- struts.xml
复制代码
1
2
3
4
5
6
7
8
9
10
11
12<struts> <!-- 开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="default" namespace="/" extends="struts-default"> <action name="userAction" class="com.x.action.UserAction"> <result type="redirect">userAction!find.action</result> <result name="list">/list.jsp</result> </action> </package> </struts>
- 处理类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public class UserAction { //增加 public String save() { return Action.SUCCESS; } //删除 public String delete() { return Action.SUCCESS; } //修改 public String update() { return Action.SUCCESS; } //查找 public String find() { System.out.println("find"); return "list"; } }
- 注意:使用动态方法调用,需要注意不同处理方法的返回值是否一致,可能会配置多个结果集。这种方式不推荐!!!
通过通配符配置来优化
- struts.xml
①表示一个或者多个字符;
②占位符1表示匹配第一个号的内容;
- web.xml
复制代码
1
2
3
4
5
6
7
8
9
10<!-- struts2的前端控制器 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
- struts.xml
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14<struts> <!-- 开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="default" namespace="/" extends="struts-default"> <!-- *表示一个或者多个字符 占位符1表示匹配第一个*号的内容--> <action name="*_*" class="com.x.action.UserAction" method="{1}"> <result type="redirect">find</result> <result name="list">/list.jsp</result> </action> </package> </struts>
- 处理类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public class UserAction { //增加 public String save() { return Action.SUCCESS; } //删除 public String delete() { return Action.SUCCESS; } //修改 public String update() { return Action.SUCCESS; } //查找 public String find() { System.out.println("find"); return "list"; } }
- 访问:
localhost:8080/项目名/save.action
。 - 注意:使用通配符时需要注意,如果有不是通配符的action,先匹配action在匹配通配符,在实际应用开发中使用通配符比较常见。
通过注解来优化
- 导入
struts2-convention-plugin-2.5.22.jar
- 在处理类上添加相关注解
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package com.x.action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; @ParentPackage(value="struts-default") @Namespace(value="/") public class UserAction { //增加 public String save() { return "success"; } //删除 public String delete() { return "success"; } //修改 public String update() { return "success"; } //查找 @Action(value="find",results= { @Result(name="list",location="/list.jsp") }) public String find() { System.out.println("find"); return "list"; } }
最后
以上就是精明大山最近收集整理的关于struts2之action的创建方式及优化笔记的全部内容,更多相关struts2之action内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复