006--Struts2中Action创建及访问方式

2024-05-12 10:58

本文主要是介绍006--Struts2中Action创建及访问方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Struts2中Action创建

在Struts2的应用开发中,Action作为框架的核心类,负责对用户请求的处理,也被称为业务逻辑控制器。一个Action类代表依次请求或调用,每个请求动作都会有一个响应的Action类。

建立一个Action类主要有以下三种方式:
- POJO(Plain Ordinary Java Object) 简单Java对象
- 实现Action接口
- 集成ActionSupport类

POJO

在Struts2中,Action可以不继承特殊的类或不实现任何接口,仅仅是一个POJO,一般来讲,要有一个公共的无参构造方法和一个execute方法,如下:

public class Hello1Action {public String execute() {System.out.println("hello 1 excute");return "success";}
}

其中execute方法要求如下:
- 权限修饰符为public
- 返回一个字符串,指示下一个页面的result
- 无参方法

实现Action接口

为了让开发人员开发的Action类更规范,Struts2提供了一个Action接口,在自定义Action类时可以实现这个接口,如下:

public class Hello2Action implements Action {@Overridepublic String execute() throws Exception {System.out.println("hello 2 action");return SUCCESS;}
}

Action接口位于com.opensymphony.xwork2.Action包中,这里需要实现execute方法并返回一个字符串。除此之外,该接口还定义了5个字符串常量,用来统一execute方法的返回值。
- SUCCESS:success,代表成功
- NONE:none,代表页面不跳转
- ERROR:error,跳转到错误页面
- INPUT:input,数据校验时跳转的路径
- LOGIN:login,跳转登录页面

继承ActionSupport类(推荐)

在开发过程中,更推荐的做法是继承ActionSupport类,其中ActionSupport实现了Action接口,除此之外,还实现了Validateable、ValidationAware、TextProvider、LocaleProvider和Seriable等接口,为我们提供了更多的功能,
示例如下:

public class Hello3Action extends ActionSupport {public String execute(){System.out.println("hello 3 action");return SUCCESS;}
}

ActionSupport类中提供了许多默认方法,包括获取国际化信息、数据校验、默认处理用户请求的方法等,通过继承该类能简化我们Action的开发。

Action的访问

之前说过,通过URL进行访问时通过packagenamespaceactionname属性决定的,然后通过action中的method属性指定Action中具体执行哪个方法。
配置Action的访问方式主要有三种:
- 原始方式
- 通配符方式
- 动态方法访问

首先附上UserAction相关代码:

public class UserAction extends ActionSupport {public String add() {System.out.println("add");return NONE;}public String delete() {System.out.println("delete");return NONE;}public String update() {System.out.println("update");return NONE;}public String query() {System.out.println("query");return NONE;}
}
原始方式

就是之前介绍到的,配置method来决定执行Action的哪个方法。
如下:

<package name="user" namespace="/user" extends="struts-default"><action name="add" class="com.happ.demo.user.UserAction" method="add"> </action></package>
通配符方式

考虑一种情况,加入现在UserAction下分别有增删改查四个方法,按照之前的逻辑需要配置四份Action,如下:

<package name="user" namespace="/user" extends="struts-default"><action name="add" class="com.happ.demo.user.UserAction" method="add"></action><action name="delete" class="com.happ.demo.user.UserAction" method="delete"></action><action name="update" class="com.happ.demo.user.UserAction" method="update"></action><action name="query" class="com.happ.demo.user.UserAction" method="query"></action></package>

显然,这样就显得过于冗长和复杂,在此,我们可以使用通配符方式解决,如下:

    <package name="user" namespace="/user" extends="struts-default"><action name="user_*" class="com.happ.demo.user.UserAction" method="{1}"/></package>

其中,action中的name属性使用的*代表任意字符,method中的{1}代表name属性中出现的第一个*所代替的字符串。
例如,当请求/user_add.action时,name属性为user_add,methon属性就为add,紧接着就会调用到Action类中的add方法。
在开发中,通配符方式是使用比较多的。

动态方法访问

动态方法访问在Struts2中默认是关闭的,如果需要使用,先开启一个常量:

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

动态方法访问主要的控制是在页面端,编写和配置Action比较简单,主要是访问路径的编写。
struts.xml配置如下:

<constant name="struts.enable.DynamicMethodInvocation" value="true"/><package name="user" namespace="/user" extends="struts-default"><action name="userAction" class="com.happ.demo.user.UserAction"/></package>

页面路径写法为:

/user/UserAction!add.action
/user/UserAction!delete.action
/user/UserAction!update.action
/user/UserAction!query.action

这样就完成了Action的动态方法访问。

这篇关于006--Struts2中Action创建及访问方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982440

相关文章

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免