实现Action(三)——Action访问Servlet API

从编译到调通:RK3588与FPGA的PCIe XDMA驱动实战解析 本文详细解析了在RK3588平台上为FPGA板卡编译、加载与调试PCIe XDMA驱动的完整实战流程。内容涵盖环境准备、Makefile深度定制、编译排错、驱动加载与内核日志解读、设备节点分析以及用户空间编程实战,旨在帮助开发者打通RK3588与FPGA之间的高速PCIe通信链路,实现稳定可靠的数据传输。 阅读详情

本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》

 

 

        Struts2的Action没有和任何Servlet API进行耦合,这是Struts2的一个改良之处,因为Struts2 不再和Servlet进行耦合,从而能够更加轻松的测试该Action。

        但对于web应用的控制器而言,不访问Servlet API基本是不可能的,例如,跟踪HTTP Session状态等等。Struts2框架提供了一种更轻松的方式来访问Servlet API。在web应用中通常要访问Servlet API的就是HttpServletRequest、HttpSession和ServletContext,这三个类别分别代表JSP内置对象中的request、session和application。

        Struts2提供了一个ActionContext类,Struts2的Action通常可以通过该类来访问Servlet API。下面是ActionContext类中包含的几个常用方法:

(1)Object get(Object key): 该方法类似于调用HttpServletRequest的getAttribute(String name)方法。

(2)Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例。

(3)static ActionContext getContext():静态方法,获取系统的ActionContext实例。

(4)Map getparameters():获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap()方法。

(5)Map getSession():返回一个Map对象,该对象模拟一个HttpSession实例。

(6)void setApplication(Map application):直接传入一个Map实例,该Map实例里面的key-value对转换成application的属性名、属性值。

(7)void setSession(Map session):直接传入一个Map实例,该Map实例里面的key-value对转换成session的属性名、属性值。

 

        下列代码将在Action类中通过ActionContext访问Servlet API,该Action中示范了向request、session和application范围设置属性值:

package ppp;

import com.opensymphony.xwork.ActionContext;

public class LoginAction implements Action {

	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String execute() throws Exception {
		ActionContext ctx = ActionContext.getContext();
		// 通过ActionContext访问application范围的属性值
		Integer counter = (Integer) ctx.getApplication().get("counter");
		if (counter == null) {
			counter = 1;
		} else {
			counter = counter + 1;
		}
		// 通过ActionContext设置application属性值
		ctx.getApplication().put("counter", counter);
		// 通过ActionContext设置session属性值
		if (getUsername().equals("scott") && getPassword().equals("tiger")) {
			// 通过ApplicationContext设置request范围
			ctx.put("tip", "服务器提示:您已经成功登陆");
			return SUCCESS;
		} else {
			// 通过ApplicationContext设置request范围
			ctx.put("tip", "服务器提示:登陆失败");
			return ERROR;
		}
	}
}

        上述代码第29行,该Action试图从application范围内读取counter属性值,如果该属性不存在,则设置counter为1,然后将该属性放置于application范围中;如果该counter属性存在,则将该counter属性值加1——也就实现了一个简单的计数器功能。

        上面的Action包含了username和password两个属性,则意味着提交到Action的表单里应该包含username和password两个属性。

敲打

 

         struts.xml配置文件代码如下:

<!DOCTYPE struts PUBLIC  
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”  
“http://struts.apache.org/dtds/struts-2.0dtd “>  
<struts>  
<!—指定全局化资源文件base名 -->  
<constant name = “struts.custom.i18n.resources” value = “messageResource”/>  
< !—指定国际化编码所使用的字符集 -->  
< constant name = “struts.i18n.encoding” value = “GBK”/>  
<!—所有的Action定义都应该放在package下-->  
<package name = "login " extends = “struts-default”>  
<action name = "login" class = “ppp.LoginAction”>  
      <!--如果处理结果返回error,则对应/error.jsp视图资源-->  
      <result name = “error”>/error.jsp</result> 
      <!--如果处理结果返回success,则对应/welcome.jsp视图资源-->   
      <result name = “success”>/welcome.jsp</result> 
</action>  
</package>  
</struts> 

        上面的配置文件中,当ppp.LoginAction返回success逻辑视图名后,系统将会使用/welcome作为实际视图资源。/welcome.jsp代码如下:

<%@page language = “java” contentType = “text/html; charset = UTF-8;”%>
<html>
<head>
<titile>成功页面</title>
</head>
<body>
本站访问次数为:${applicationScope.counter}<br>
    ${sessionScope.user>,您已经登陆!<br>
    ${requestScope.tip>
</body>
</html>

        上面的7、8、9行代码使用了表达式语言来输出application、session和request范围内的指定属性。前提是这些属性存在并且有值,这些值当然只能在前面的Action中设置。


哭

 

NPU、CPU和GPU NPU、CPU和GPU是三种不同类型的处理器,它们各自有不同的设计特点和应用场景。NPU(Neural Processing Unit,神经网络处理单元)是一种专门为加速神经网络计算而设计的处理器。 阅读详情

相关推荐

机器人运动不流畅?手把手教你用ACCSET调整ABB/FANUC点位加速度

本文针对ABB和FANUC工业机器人运动不流畅、拐角抖动、到位震颤等常见问题,提供了详细的解决方案。核心在于使用ACCSET指令(ABB)或ACC选项(FANUC)调整机器人的点位加速度与减速度参数。文章通过实战案例与系统化调试流程,手把手指导工程师优化运动性能,实现平稳、精准的机器人运动控制。

gpu4optimizer的博客 284

Java基础 - servlet(一)

1、servlet应用实例 1、客户端提交一个表单数据访问服务端的整个流程图: ​ 客户端访问add.html页面并通过Http Request携带表单请求数据,通过web.xml中的映射关系,找到AddServlet类中的doPost方法,并执行该方法。 2、编写一个add.html表单提交页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&

java123456111的博客 1382

Windows 11 下 WSL 离线安装 Ubuntu 22.04 保姆级教程(国内镜像加速版)

本文提供了一份针对中国地区用户的Windows 11下WSL离线安装Ubuntu 22.04的详细教程。通过使用国内镜像源加速下载安装包,并配合PowerShell命令完成部署,有效解决了官方商店下载缓慢的问题。教程涵盖环境准备、离线包获取、安装初始化及安装后的关键优化配置,帮助用户快速搭建高效的Linux开发环境。

weixin_28452161的博客 1376

JavaScript form表单请求后台接口

笔记1

weixin_42178114的博客 1207

Windows下Maven环境变量配置避坑指南:解决‘mvn‘不被识别问题

本文详细解析了Windows系统中配置Maven环境变量时常见的'mvn'不被识别问题,特别是当系统提示“无法将‘mvn’项识别为cmdlet、函数、脚本文件或可运行程序的名称”时的解决方案。文章从问题根源入手,提供了清晰的配置步骤、深入的排查方法以及针对PowerShell的特殊处理,旨在帮助开发者彻底解决环境变量配置难题,确保Maven命令正常使用。

weixin_28826961的博客 389

学Simulink--基础微电网场景实例:基于Simulink的微电网经济调度优化策略仿真

指标传统调度PSO经济调度(本文)目标值总运行成本(元/h)45.232.5(工况1)降低≥20%调度响应时间(s)25<30储能SOC范围(%)50~50(不变)28~56(动态优化)20~80弃风弃光率(%)0(强制满发)0(优化消纳)0原理:微电网经济调度通过PSO算法优化各单元出力,以总成本最小化为目标,平衡功率平衡与设备约束;建模:Simulink中用实现PSO控制器,结合PV/WT/DG/ESS模型,完成闭环优化;验证。

amy_mhd的博客 67

vue上传文件 用:action调用接口 如何获得后端返回值

仅限用于vue控件 调用后台接口传值问题

hd2019jsz的博客 2612

ARM功耗管理软件之DVFS&AVS

思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS?

AI-安全-功耗 1230

java action例子_Action访问Servlet的API的简单实例

Action访问Servlet的API_,主要访问如下:1.>获取request对象2.>获取请求参数3.>获取response对象,可用于传递cookie3.>获取作用域对象,request,Session,application,并设置共享数据,访问方式一:通过实现感知接口中的setter方法,讲其setter方法中的request参数传递到本类中来:即,在本类中定义一...

weixin_36410293的博客 331

关于爬虫源影视资源设置

本文介绍了Omnibox 2.1.3版本的爬虫脚本配置方法,重点演示了如何添加猫眼资源数据源。脚本包含完整的API请求处理、数据格式化、视频详情获取和弹幕匹配等功能模块。通过环境变量配置采集站API地址和弹幕API地址,支持视频列表获取、分类检索、详情查询和播放地址解析等功能。脚本采用模块化设计,包含完善的错误处理和日志记录机制,能够将采集站返回的数据转换为标准格式,并支持批量获取视频详情来丰富数据。同时提供了弹幕匹配功能,可根据视频文件名或播放地址自动匹配相关弹幕资源。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 4653

Python爬虫实战:构建药监局药品批准信息本地查询系统

在医药信息化时代,药品批准信息的快速查询对于医药从业者、研究人员和普通消费者都具有重要意义。国家药品监督管理局(NMPA)提供了官方的药品查询系统,但有时我们需要建立本地数据库以便批量分析或离线查询。本文将详细介绍如何使用Python爬虫技术,结合最新的异步爬虫框架和技术栈,构建一个完整的药监局药品信息本地查询系统。本系统将实现以下功能:自动化爬取药监局官网的药品批准信息数据清洗和结构化存储建立本地查询接口数据定期更新机制pythonimport os"""药品类型枚举"""

2201_76125261的博客 726

Action使用ActionContext访问Servlet API

ActionContext是Action执行时的上下文,其中保存的是Action执行时用到的对象,如请求的参数,servlet的上下文,会话和本地化的一些信息,开发人员可以通过使用ActionContext的静态方法getContext()来获取当前的ActionContext对象。ActionContext是线程安全的,即在同一个线程里,ActionContext里的属性是唯一的,这样Actio

LWL_IT_Home的专栏 451

深度学习在传感器数据分析中的创新应用

传感器是物理世界与数字世界的“接口”,其生成的高维、时序、多源数据蕴含着设备状态、环境变化、用户行为等关键信息。传统传感器数据分析依赖手工特征工程与简单机器学习模型,难以应对复杂场景下的非线性、长程依赖与实时性需求。深度学习通过自动特征提取非线性建模与端到端学习,成为传感器数据处理的革命性工具。本文从概念基础理论框架架构设计实现机制到实际应用,系统拆解深度学习与传感器数据的融合逻辑,结合工业预测维护医疗健康监测智能交通等场景,揭示其技术边界与未来演化方向。

大数据洞察的博客 567

Action访问Servlet API的几种方式,其中方式三比较常用,下来是方式一,最后是方式二(实现接口的方式)

 方式一:使用ActionContext类间接获取Servlet API        Struts 2提供了一个ActionContext类,Struts 2的Action可以通过该类来访问Servlet API,以下是ActionContext类        中常用的几个方法:        1.Object get(Object key):类似于调用HttpServletReq

智玲君 1451

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

struts2中访问ServletAPI的方式

1、使用struts2提供的一个ServletActionContext工具类,在该类中包含了一系列相对应的静态方法,可以直接获取。 该类包含了一下几个静态方法: static PageContext getPageContext():取得Web应用的PageContext对象。 static HttpServletRequest getRequest():取得Web应用的...

Gray_humor的博客 286

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Struts2的Action控制类的实现及Action访问Servlet API

Struts2的Action控制类的实现Struts2的应用开发中,Action作为框架的核心类,实现对用户请求的处理,Action类被称为业务逻辑控制器。一个Action类代表一次请求或调用,每个请求的动作都对应于一个相应的Action类,一个Action类是一个独立的工作单元。实现Action控制类共有3种方式: (1)POJO的实现 不继承任何父类,也不实现任何借口,仅仅是一个POJO类。

qq_19925065的博客 878

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Struts之Action(Action继承类、实现接口、访问servlet API方法)

Struts之Action类文件 Action类文件,真正实现了具体的业务逻辑处理。   Struts2提供了一个Action接口,定义如下: Public interface Action{ Public static final String ERROR = “error”; Public static final String SUCCESS = “success”; Publ

搬家啦x 2432

Action中访问Servlet API

1、通过ActionContext访问Servlet APIActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该实例提供了一些访问Servlet API的方法,通常的方法是返回值方法名功能描述ActionContextgetContext()获取系统的ActionContext实例MapgetSession()返回一个Map实例,该对象存入HttpSession实例。voidsetSession(Map session)直接传入一个M

俊哥 661

Struts2的Action类以及获取Servlet相关API

Struts2的Action类只要是一个普通的java类 我们需要为这个action类提供一个无参构造器(Struts2会为每次请求创建一个Action的实例,所以是多实例) Action的请求参数     //如果想要在Action中获得用户发送的请求参数,只需在Action中创建一个参数同名的属性     //并且为属性提供get和set方法,Struts2会将属性自动注入Action...

大哥的叔的博客 1万+

Struts2.x中的Action访问Servlet API方式

 Struts2.x中Action访问Servlet API方式 Action访问Servlet API方式总体分为两种方式:侵入Servlet API和非侵入Servlet API。   侵入Servlet API: 使用ServletActoinContext静态方法直接获得request等对象   非侵入Servlet API: 使用ActionContext

每天都得进步一点点 651

Action访问Servlet API实战

一编写Action package org.crazyit.app.action; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import java.util.Map; public class LoginAction implements Action ...

实践求真知 324

Structs2 Action访问Servlet API的三种方式

第一种:使用Structs2框架提供的内置类 Class ActionContext java.lang.Object com.opensymphony.xwork2.ActionContext All Implemented Interfaces: Serializable Direct Known Subclasses: ServletActionContext

a915800048的专栏 664

struts中的action和Action类以及struts2中如何在Action类中获得servlet api的域对象

1.Struts2的学习中大家都会遇到action和与action对应的Action类,那么什么是action什么是action对应的Action类呢? 例如struts.xml的配置文件如下: action:代表一个struts2的请求,对应的是Action类的一个方法。 Action类:表示处理多个action请求的普通javabean。也就是配置文件中节点中对应的class配置

nihaowoshiyudong的博客 2231

Struts2 Action与Servlet API耦合

单元测试在开发中是非常重要的一个环节 程序员在写完代码时,相应的单元测试也应写完整,否则你的代码就是不能让人信服的 Struts2将Action与Servlet的API进行解耦之后,就使得单元测试变得非常容易了 比如HttpServletRequest对象,它是由Tomcat容器给我们提供的,我们自己产生不出来 若Action中充斥者ServletAPI,哪怕仅一个,那么一般意义上的JUn

waiting476的专栏 3227

Action访问Servlet API

Struts2提供了两种方式来访问ServletAPI。         一种是通过ActionContext访问Servlet API;         另一种是通过实现*Aware()接口来获得Servlet API。  通过ActionContext访问Servlet API         ActionContext类提供了一个静态方法getContext(),该方法返回一个Act

ccskun的专栏 564

在Struts中Action访问Servlet API

 最近在读一本市面上刚有得卖的新书:李刚著的《Struts 2权威指南》,感觉写得非常好,于是就参考该书作了一个关于在Struts中Action访问Servlet API案例。如下:Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,从而能更轻松的测试该Action。但对于Web应用的控制器

eachstep的专栏 859
上一篇: Struts2中ActionContext介绍
下一篇: Struts2 配置文件struts.xml示范模板
IMFuckingHigh
博客等级 码龄18年 85粉丝 21原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值