概述
在struts2中有三种方式创建action处理类。
action的创建方式
通过实现Action接口来创建Action处理类
该方式可以直接使用action提供的常量
SUCCESS
等,不需要Action.SUCCESS
;
该方式必须重写默认处理方法;
- web.xml
<!-- 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>
- 处理类
package 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
<?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>
- 页面
<body>
action被执行
</body>
通过继承ActionSupport类来创建action的处理类(推荐)
ActionSupport实现类Action接口,并且提供了很多其他的struts2提供的功能。比如:数据校验,国际化。默认实现execute方法。
- web.xml
<!-- 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>
- 处理类
public class Hello1Action extends ActionSupport{
}
- struts.xml
<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
<!-- 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>
- 处理类
package com.x.action;
public class Hello2Action {
public String execute() {
System.out.println("无侵入性实现");
return "success";
}
}
- struts.xml
<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
<!-- 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>
- 处理类
public 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
<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
<!-- 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
<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>
- 处理类
public 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
<!-- 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
<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>
- 处理类
public 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
- 在处理类上添加相关注解
package 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的创建方式及优化笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复