struts2学习笔记(三) Action(上)

postman安装包.zip postman win64 7.21.1版本,是exe文件,直接下载安装即可。给自己也留个底,有需要的大家可以下载吧,做API测试相当有用 立即下载

Action是什么

应用程序可以完成的每一个操作都可以称之为动作。例如,显示一个登录表单是一个动作,将用户信息保存起来也是一个动作。

动作类其实就是普通的java类,他们可以有属性和方法,但是需要遵循一些规则:

(1)每个属性必须有一个get和一个set方法,属性命名遵循JavaBean命名规则。

(2)动作类必须有一个不带任何参数的构造器。如果Action中没有定义构造器,那么编译器会自动增加一个不带参数的构造器,但是如果我们定义了一个构造器,那么我们必须保证要有一个不带参数的构造器

(3) 每个动作类至少有一个方法供Struts2在执行该动作时调用。

(4) 动作类并不是非得扩展某个特定的父类或是实现某个特定的接口。但是一般情况下动作类都将继承ActionSupport基类。并且如果我们在struts.xml中配置action时,如果没有指定class属性,那么默认就是ActionSupport。

(5)Struts2会为每个http请求创建一个新的Action实例,因此不用考虑多线程的问题。

Action的作用:

1) 动作最重要的作用是为给定请求封装需要做的实际工作

2) 在请求到视图的框架自动数据传输中作为数据的携带者

3) 动作必须决定哪个结果视图应该呈现请求响应中返回的视图

Action的配置

 要想使我们的Java类被Struts2识别为Action,那么我们还需要在struts.xml中做一些配置。来看一下先前的hello world例子中对Action的配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
 
   <constant name="struts.devMode" value="true" />
 
   <package name="default" namespace="/" extends="struts-default">
 
      <action name="hello" class="action.HelloWorld">
        <result name="success">/success.jsp</result>
      </action>
 
   </package>
 
</struts>

我们需要将我们的Action放在某个特定包中,通过包来组织我们的Action,在同一个包中Action的名字不能重复,但是在不同的包中可以出现名字相同的Action。Struts2中的包跟Java中的包有些相似,但是Struts2中的支持Abstract和extends。Struts2中内建了struts-default包,里面预先配置许多更框架功能相关的拦截器。我们的包只需要继承struts-default包,那么我就能够使用框架提供的一些功能了。那么我们先了解一下Struts2中的包(package):

在struts.xml中使用<package>标签来定义包,其中的name属性为必须属性。


name主要用于标识这个包,其中的extends属性可选,表示继承某个包。namespace属性用于指定这个包的命名空间,在访问包中的Action时需要包含namespace。


需要注意,Struts2加载时会顺序的读取struts.xml文件,因此需要注意各个package之间的依赖关系。

在package标签中通过使用action标签来定义Action,name属性为必须属性,用于指定action的名字,class属性为可选,Action所对应的动作类。在action标签中使用result标签来为该action定义一个结果。Action中被执行的方法总是会返回一个字符串对象,来告诉struts2执行那个结果,result标签中的name属性正是用于匹配动作方法的返回值的。

Action的实现

(1)      POJO实现

Action可以不继承任何类或实现任何接口,普通的java类即可,但是需要需一个无参数构造器,还需需一个execute方法,其定义如下:

public String execute()throws Exception {

         //….

   }

抛出异常是可选的,如果Action中的方法名不是execution,那么就需要通过在struts.xml中action标签的method属性指定:

<actionname="hello"class="action.HelloWorld"method="save">

         <resultname="success">/success.jsp</result>

</action>

(2)      实现com.opensymphony.xwork2.Action接口

在该接口中定义了一个execute方法和一些常量:

      public static final java.lang.String SUCCESS = "success";

      public static final java.lang.String NONE = "none";

      public static final java.lang.String ERROR = "error";

      public static final java.lang.String INPUT = "input";

      public static final java.lang.String LOGIN = "login";

这些常量可以返回一些预定的result。

SUCCESS:表示动作执行成功并应该把结果视图显示给用户

NONE:表示动作执行成功但不应该把任何结果类型显示给用户

ERROR:表示动作执行不成功并应该把一个报错视图显示给用户

INPUT:表示输入验证失败并应该把刚才用来获取用户输入的那个表单重新显示给用户

LOGIN:动作未执行,因为用户没有登录,应将登录视图显示给用户

(3)      继承ActionSupport类

ActionSupport类本身实现了Actin接口,因此继承ActionSupport类相当于实现了Action接口。除了Action接口之外,ActionSupport还实现了其他几个接口:

com.opensymphony.xwork2.Validateable:提供validate()方法来为Action增加验证的功能

com.opensymphony.xwork2.Validateaware:提供方法来保存和恢复action或field级的错误信息

com.opensymphony.xwork2.TextProvider:提供获取本地信息文本的功能

com.opensymphony.xwork2.LocaleProvider:提供getLocale()方法来获取本地消息

在Action中访问资源

       在Action中,可以通过ServletActionContext对象或者Aware接口去访问ServletContext、HttpServletRequest、HttpServletResponse和HttpSession等资源。使用Aware接口访问资源是依赖注入(DI)的一种实现方式。

       通过ServletActionContext或者ActionContext可以访问刚才说到的资源,前者包含后者。ServletActionContext提供了一些静态方法:

static HttpServletRequest  

    getRequest()

static HttpServletResponse   

    getResponse()      

static ServletContext   

    getServletContext()


使用Aware方式访问资源时需要我们在动作类中定义一个相应资源类型的成员变量,并且实现Aware接口中的方法。

org.apache.struts2.util.ServletContextAware

void  

  setServletContext(ServletContext context)

org.apache.struts2.interceptor. ServletRequestAware

void  

  setServletRequest(HttpServletRequest request)

org.apache.struts2.interceptor. ServletResponseAware

void  

  setServletResponse(HttpServletResponse response)

org.apache.struts2.interceptor. SessionAware

void  

  setSession(Map<String,Object> session)

注意SessionAware中setSession的参数是Map类型,而不是HttpSession类型。

使用Aware的Action示例:

package action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld extends ActionSupport implements SessionAware {

	private String userName;

	private Map<String, Object> session;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String execute1() throws Exception {
		
		session.put("userName",userName);
		
		return "success";
	}

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

}

暂时先写到这里了,休息一下。



DASH 流媒体协议(Dynamic Adaptive Streaming over HTTP)概述——起源、MPD文件解析、相关项目 简单介绍DASH的起源与发展、MPD文件简要解析、相关项目,以及常见流媒体协议的比较 阅读详情

相关推荐

数字电子时钟——数字电路课设

本文设计了一种基于中小规模集成电路的数字电子时钟系统,采用模块化设计方法,包含晶振电路(CD4060+D触发器)、计时电路(74HC161计数器)、数码管驱动(CD4511)和整点报时功能。系统实现了60进制秒/分、24进制小时、7进制星期的计时显示,支持手动校时功能,并具备整点报时特性(59分54-58秒5次500Hz低音,59秒1次1000Hz高音)。通过分模块调试与整合,最终实物电路满足设计要求,获得优秀评价。

来自FZU——电子科学与技术专业 1487

Postman如何汉化(保姆级教程)

比如你的postman是9.12.2版本那么你就点击进入,然后会看到resources文件夹,把刚下载的app.zit解压在当前文件夹即可!记得关闭postman的自动更新,不然的话会自动更新到最新版本,然后你所下载对于汉化包就不管用了!(点击桌面的postman,右键点击,然后选择文件所在位置,即可看到)我在写这篇文章的时候,补丁包的最新版本号为 9.12.2:下载。有需要的小伙伴可以自取,如果遇到无法下载的情况可以评论留言。点击设置,然后点击关于,就可以看到。

weixin_50559423的博客 3万+

<视觉>——单目相机的标定(简单原理+Opencv实现)

单目相机的标定原理大致如下: 世界坐标到像素坐标的转换。 期间的参数有S尺度因子,内参矩阵K,旋转矩阵R,平移矩阵T,一共八个未知数。 在Opencv中我们可以方便的根据相机拍摄不同位姿的标定板图片来标定相机,从而求得这些参数,从而可以将相机下的坐标和实际的世界坐标联系起来,求取单应性矩阵H 参考: 单目相机综述:写的特别好 https://www.cnblo...

Kano365的博客 1万+

Postman如何设置成中文?(汉化)

postman设置成中文!!(汉化)

I always knew I was going to be rich. I don't think I ever doubted it for a minute. 15万+

【论文学习】《Fully-Convolutional Siamese Networks for Object Tracking》2016年SiamFC 全卷积孪生网络用于目标跟踪

在这项工作中,我们脱离了跟踪中采用的传统在线学习方法,并展示了一种专注于在离线阶段学习强嵌入的替代方法。与在分类设置中的使用不同,我们证明,对于跟踪应用,孪生全卷积深度网络能够更有效地使用可用数据。这不仅反映在测试时,通过执行有效的空间搜索,也反映在训练时,其中每个子窗口都有效地代表一个有用的样本,而几乎没有额外的成本。实验表明,深度嵌入为在线跟踪器提供了自然丰富的特征来源,并使简单的测试时策略表现良好。我们相信这种方法是对更复杂的在线跟踪方法的补充,并期望未来的工作能够更彻底地探索这种关系。

SkyLeopard的博客 2417

ican项目四汽车零件智能测量

ican项目四汽车零件智能测量

weixin_72050316的博客 559

Postman汉化教程,教您把Postman设置为中文!

Postman汉化教程

2302_76990932的博客 4万+

RT-DETR改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)

本文记录的是利用中的模块优化的目标检测网络模型。通过局部特征提取器、周围环境提取器、联合特征提取器和全局环境提取器来提取局部特征、周围环境和全局环境信息,充分利用不同层次的信息。本文将其应用到中,并进行二次创新,使网络能够更好的处理多类别目标的分类能力。CGNet: A Light-Weight Context Guided Network for Semantic Segmentation1️⃣ 首先通过局部特征提取器floc(∗)floc(*)floc(∗)和周围环境提取器fsur(∗)f_{sur }

Limiiiing的博客 1348

postman接口测试中文汉化教程

打开之后就是github的页面了,当然目前只最更到9.12.2版本。等待后续版本持续汉化....(有兴趣的同学可以看看源码,说不定咱也可以成为新版本的贡献者之一)点击下载app.zip包即可Q:指定版本?不...我要最新的!!!A:咱做测试这些年了,最新的香么?不,最稳的才香附上,再说最新的不是没出来么windows64位https://dl.pstmn.io/download/version/版本号/win64windows32位。

2301_79535544的博客 1万+

Mediatek NeuroPilot Yolov8量化

【代码】Mediatek NeuroPilot Yolov8模型转化。

sdrgtywretyeruet的专栏 344

Vue3 - Element Plus 树形表格组件 el-table 一键全部展开折叠功能,支持动态数据及懒加载点击父级才去请求的场景,Tree树状表格每行带有children的表格全部收起和折叠!

vue3,element-plus,表格Table组件,el-table,怎样一键展开/收起,一键展开或折叠树形表格,如何通过按钮来实现全部展开,不生效,一键折叠或展开表格,表格children嵌套,带有子集,多级表格,懒加载,动态数据,table表格的children通过后端请求过来的怎么一键展开请求数据呢,表格如何一键展开和折叠,怎么使用,教程,树形数据table全部展开和折叠,一键展开或折叠树形表格,点击展开接口获取数据,toggleRowExpansion,树形表格懒加载与全部折叠,深层多级,复杂,

🏆 前端领域优质创作者 6800

Struts2学习笔记三:深入Action

一:Action中获取参数值 在Servlet中,我们通过doGet()/doPost()方法中的参数,获取request/response对象,然后提取参数值; 处理请求结束后,有数据需要携带返回客户端时,servlet中是通过request.setAttribute()的方式携带属性值返回客户端。 而在Action中,提供了三种方式获取参数、返回结果: ...

a631278993的博客 203

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

WW、forever的博客 398

struts2 jsp跳转action 404_Struts2 学习笔记(三)

1. Struts2的拦截器1.1 拦截器概述1.1.1 什么是拦截器Interceptor:拦截器,起到拦截Action的作用;Filter:过滤器,过滤从客户端向服务器发送的请求;Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。Struts2框架核心的功能都是依赖拦截器实现的;1.1.2 Struts2的执行流程客户端向服务器发送一个Action的请求,执行...

weixin_35476604的博客 262

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Struts2学习笔记(三) action编写的三种方式

方法1:创建一个类,定义一个名为execute的方法,没有任何参数,返回值类型为string。 方法2:实现action接口。 该接口中提供了五个常量供我们使用,代表的意思大致如下。 SUCCESS:成功 NONE:不跳转页面 ERROR:出现错误,失败 INPUT:表单提交验证出错或是用户输入的参数有误等 LOGIN:用户登录出错 这些在源码中都有详细的描述,如下图所示 方法3: 继承Ac...

showadwalker的博客 270

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【笔记】Struts2学习笔记(三)--Action

一、Action入门           笔记一:简单项目           Struts作用:把请求和视图分开 二、.Namespace          1.namespace决定了action的访问路径,             namespace默认为"",可以接受所有路径的action,意味着只要找到一个index.action,没找到一个和它对应的精确的package时

Angiexia的专栏 1353

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Struts2学习笔记(三)-----Action 的访问

一 、Action 的编写(3种写法) 1 、Action类是POJO的类 package czm.struts2.testdemo2; /** * Action编写方式一:Action类是一个POJO(Plain Ordinary Java Object 简单的Java对象)类 * @author ASUS * */ public class TestAction2 { pu...

Rachel_pan的博客 264

Struts2学习笔记(三)——在action中使用隐含对象

  我们知道,在Struts1.x中我们可以通过HttpServletRequest参数直接使用获得有关的隐含对象进行数据的传递。但是在Struts2中,核心控制器没有给action传递任何的参数,很好的降低了核心控制器和业务控制器action之间的耦合度。有时候我们是必要在Action中使用隐含对象设置一些参数以便在展示页面中使用。下面我们来看一下在action中使用隐含对象的方法,并比较其优...

mytream的专栏 206

Struts2学习笔记(三):Action名称的搜索顺序和默认值

假设我们的访问地址为:http://localhost:8080/struts2/test/helloworld,那么改成http://localhost:8080/structs2/test/sdf/sfs/aaa/helloworld 还能访问到吗? 答案是YES 很奇怪,为什么呢? 让我们来看一下Action名称的搜索顺序 1.获得请求路径的URI,例如url是:http://...

weixin_30378623的博客 106
上一篇: struts2学习笔记(三) Action(上)
下一篇: php文件下载IE文件名乱码问题
jdluojing
博客等级 码龄17年 79粉丝 47原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值