Struts2中ActionContext介紹 && Struts2如何获得request

Struts2通过使用ActionContext类获取request和response对象 NULL 博文链接:https://zhouhaitao.iteye.com/blog/1126042 立即下载

1. ActionContext

在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们需要在Action中取得request请求参数"username"的值:

  1. ActionContext context = ActionContext.getContext();
  2. Map params = context.getParameters();
  3. String username = (String) params.get("username");

ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放的是Action在执行时需要用到的对象. 一般情况, 我们的ActionContext都是通过: ActionContext context = (ActionContext) actionContext.get();来获取的.我们再来看看这里的actionContext对象的创建:

static ThreadLocal actionContext = new ActionContextThreadLocal();

ActionContextThreadLocal是实现ThreadLocal的一个内部类.ThreadLocal可以命名为"线程局部变量",它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.这样,我们ActionContext里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的.

通过ActionContext取得HttpSession: Map session = ActionContext.getContext().getSession();

2. ServletActionContext

ServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了我们上面介绍的ActionContext,它提供了直接与Servlet相关对象访问的功能,它可以取得的对象有:

(1)javax.servlet.http.HttpServletRequest : HTTPservlet请求对象

(2)javax.servlet.http.HttpServletResponse : HTTPservlet相应对象

(3)javax.servlet.ServletContext : Servlet上下文信息

(4)javax.servlet.ServletConfig : Servlet配置对象

(5)javax.servlet.jsp.PageContext : Http页面上下文

如何从ServletActionContext里取得Servlet的相关对象:

<1>取得HttpServletRequest对象: HttpServletRequest request = ServletActionContext. getRequest();

<2>取得HttpSession对象: HttpSession session = ServletActionContext. getRequest().getSession();

3. ServletActionContext和ActionContext联系

ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问Servlet的相关对象.

注意:在使用ActionContext时有一点要注意: 不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null;同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,也不要直接将req作为类变量给其赋值。至于原因,我想是因为前面讲到的static ThreadLocal actionContext = new ActionContextThreadLocal(),从这里我们可以看出ActionContext是线程安全的,而ServletActionContext继承自ActionContext,所以ServletActionContext也线程安全,线程安全要求每个线程都独立进行,所以req的创建也要求独立进行,所以ServletActionContext.getRequest()这句话不要放在构造函数中,也不要直接放在类中,而应该放在每个具体的方法体中(eg:login()、queryAll()、insert()等),这样才能保证每次产生对象时独立的建立了一个req。

4. struts2中获得request、response和session

(1)非IoC方式

方法一:使用org.apache.struts2.ActionContext类,通过它的静态方法getContext()获取当前Action的上下文对象。

  1. ActionContext ctx = ActionContext.getContext();
  2. ctx.put("liuwei", "andy"); //request.setAttribute("liuwei", "andy");
  3. Map session = ctx.getSession(); //session
  4. HttpServletRequest request = ctx.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
  5. HttpServletResponse response = ctx.get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);

细心的朋友可以发现这里的session是个Map对象, 在Struts2中底层的session都被封装成了Map类型. 我们可以直接操作这个Map对象进行对session的写入和读取操作, 而不用去直接操作HttpSession对象.

方法二:使用org.apache.struts2.ServletActionContext类

  1. public class UserAction extends ActionSupport {
  2.     
  3.     //其他代码片段
  4.     
  5.     private HttpServletRequest req; 
  6. //  private HttpServletRequest req = ServletActionContext.getRequest(); 这条语句放在这个位置是错误的,同样把这条语句放在构造方法中也是错误的。
  7.     public String login() {
  8.         req = ServletActionContext.getRequest(); //req的获得必须在具体的方法中实现
  9.         user = new User();
  10.         user.setUid(uid);
  11.         user.setPassword(password);
  12.         if (userDAO.isLogin(user)) {
  13.             req.getSession().setAttribute("user", user);
  14.             return SUCCESS;
  15.         }
  16.         return LOGIN;
  17.     }
  18.     public String queryAll() {
  19.         req = ServletActionContext.getRequest(); //req的获得必须在具体的方法中实现
  20.         uList = userDAO.queryAll();
  21.         req.getSession().setAttribute("uList", uList);
  22.         return SUCCESS;
  23.     }
  24.     
  25.     //其他代码片段
  26. }

(2)IoC方式(即使用Struts2 Aware拦截器)

要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点。

  1. public class UserAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
  2.     private HttpServletRequest request; 
  3.     private HttpServletResponse response; 
  4.     public void setServletRequest(HttpServletRequest request) {
  5.         this.request = request; 
  6.     }
  7.     public void setServletResponse(HttpServletResponse response) {
  8.         this.response = response; 
  9.     }
  10.     public String execute() { 
  11.         HttpSession session = request.getSession(); 
  12.         return SUCCESS; 
  13.     }
  14. }
VMware VSAN 高级参数介绍(测试用) VSAN 的策略驱动让我们看到了VSAN无穷的潜力,其设计思路相当新颖,在一个基础资源池上使用策略就能实现不同对象的区分服务,而目前没有其他厂家能到VMware这样的高度。 VSAN 呈现给用户配置很简单,但实际上设计及后台比较复杂。笔者无意间发现了VSAN的隐藏高级参数设置,有很多好玩的选项想分享出来。这些参数全部是针对每主机进行设置的。VSAN 中有很多默认设置,这些设置应该都是研发人员多次测试得出的最优值,修改可能导致环境异常,并不建议修改! 目录 参数1:全闪配置下 SSD 写缓存最大. 阅读详情

相关推荐

华为eNSP实战:手把手教你配置DHCP全局地址池(含AP固定IP分配)

本文通过华为eNSP模拟器,详细演示了如何配置DHCP全局地址池,为不同业务VLAN动态分配IP地址,并重点讲解了如何通过MAC地址绑定为接入点(AP)分配固定IP。文章涵盖了从拓扑设计、基础网络搭建到地址池精细配置、验证测试及常见故障排查的全流程,是网络工程师掌握企业级DHCP部署与AP管理的实用指南。

weixin_29235923的博客 599

Struts2获取request的几种方式汇总(list对象获取)

Struts2获取request三种方法   struts2里面有三种方法可以获取request,最好使用ServletRequestAware接口通过IOC机制注入Request对象。 在Action中获取request方法一:   在Action中的代码: Map request = (Map)ActionContext.getContext().get("

java、c++、机器学习方向King 3636

gnuradio+b210实现FM收音机

gnuradio+b210实现FM收音机环境介绍FM接收1 Flow Graph2 变量参数FM发射1 Flow Graph 环境介绍 Name Version gnuradio 3.7.14.0 uhd 3.15.0.0 ubuntu 18.04 usrp b210 参考 https://www.ijedr.org/papers/IJEDR1702038.pdf Audio File Transmission using GNURADIO and USRP FM接

u011745228的博客 5126

Action中获取request、response、session

在使用struts2时,经常需要操作HttpServletRequest、HttpServletResponse、HttpSession对象,下面就说说几种获取这几种对象的方法。 1.使用ServletActionContext类 strut...

257

高阶玩法——Dify生成的数据自动写入mysql数据库

采用自定义工具方式,利用 python编写一个服务sql_save_post,将接收到的内容写入指定数据库的表中,并为该服务撰写一个 OpenAPI 的 schema。配置工作流:我们以写入天气预报为例,在生成天气预报内容后,连接自定义工具“sql_save_post”,将所需的字段配置完成后,实现将生成的内容自动写入mysql数据库中。编写OpenAPI的schema:在dify平台的工具栏目,创建自定义工具,输入工具名称“sql_save_post”。工具:sql_save_post;

qq_44493378的博客 8539

多重共线性问题 -- 岭回归方法

概述 本篇博客分为三大部分,线性模型、多重共线性问题和岭回归。其中,线性模型中介绍了线性模型定义和普通最小二乘法对线性模型的拟合。第二部分,借由1987-2007年的人口、消费和科技对碳排放的影响的数据来说明多重共线性问题(包括如何从定性和定量两个方面判断多重共线性问题)和多重共线性问题对普通最小二乘估计的影响。第三部分,使用岭回归对第二部分中的多重共线性问题进行拟合,并基于R2R^2R2决定系数...

楚江客的记录 1万+

ServletActionContext 怎么获取

ServletActionContext 是 Struts2 框架中的一个类,用于获取当前请求、响应、会话等 Servlet API 对象。获取方法如下: 获取 HttpServletRequest 对象:ServletActionContext.getRequest() 获取 HttpServletResponse 对象:ServletActionContext.getResponse() 获...

weixin_42596011的博客 274

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

坚韧与专注 2161

ActionContext与ServletActionContext的区别及获取request、session等对象

为什么80%的码农都做不了架构师?>>> ...

weixin_34087503的博客 210

GEE:变异系数法在遥感影像分析中的应用及权重计算

本文介绍了在Google Earth Engine(GEE)平台上基于变异系数法的多指标加权遥感影像分析方法。该方法通过计算每个指标的平均值和标准差,进而计算变异系数来评估指标的变化程度。利用变异系数,我们可以计算每个指标的权重,并将其应用于加权和指数的计算,从而提高遥感影像分析的准确性和可靠性。方法应用于计算Risk-Screening Environmental Indicators (RSEI),并以此为例。

养乐多的博客 2276

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

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

2201_76125261的博客 727

struts2获取request对象的四种方式

struts2中,有四种方式获取request对象的方式,实现时有解耦和耦合之分 解耦:使得我们使用struts2测试时不需要启动服务器,在一定的程度上,能提高我们的开发效率.具体实现思路,通过ActionContext对象获取,代码如下: //第一种获取requet对象方法---HttpServletRequest对象的attributes(解耦) Map&lt;String,...

qq_36306640的博客 2666

PyTorch强化学习实战(1)——强化学习(Reinforcement Learning,RL)详解

在本节中,开始进入探索强化学习 (Reinforcement Learning, RL) 之旅,首先剖析了强化学习的独特之处及其与监督学习、无监督学习范式的关系。随后系统学习了强化学习的基础形式化框架及其内部关联机制,并深入讲解了马尔可夫过程 (Markov Process, MP)、马尔可夫奖励过程 (Markov Reward Process, MRP) 和马尔可夫决策过程 (Markov Decision Process, MDP),为后续学习奠定基础。

盼小辉丶的博客 2050

Struts2中ActionContext介紹&&Struts2如何获得request

1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们需要在Action中取得request请求参数

说:/~不了的专栏 531

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

struts2中 ServletActionContext与ActionContext区别

1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们需要在Action中取得request请求参数

1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等 .

笔者不知道该用哪个词来形容ValueStack、ActionContext等可以在Struts2中用来存放数据的类。这些类使用的范围不同,得到的方法也不同,下面就来一一介绍。     声明:本文参考Struts2版本为2.3.1.2,内容仅供参考,限于笔者水平有限,难免有所疏漏,望您能友善指出。本文发表于ITEYE,谢绝转载。 1. ValueStack     ValueStack在中

ambow_cq的专栏 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ServletContext、ActionContext、ServletActionContext介绍

一 、ServletContext 两个问题: 1.大家在访问某个网站的时候,往往都会看到网站的首页面显示您是第几位浏览者(网站计数器),这是怎么实现的? 2.我们在访问某个bbs网站的时候,往往会显示有多少人在线,这是怎么实现的? 可能我们会想到的常规实现思路:数据库或者文件。这种做法比较简单,但是却会对数据库或者文件访问过于频繁,开销比较大。 解决之道是用ServletContext 1.什么...

person_on_pyramid的博客 3204

Struts2中ActionContext介绍

本文转自互联网,并整理。     在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话 (Session)的一些信息,,甚至需要直接对JavaServlet Http的请求(HttpServ

虽然我很菜 1038

Struts2里ActionContext的put方法和request的setAttribute方法

在Servlet和jsp的交互中,使用ActionContext.getContext.put(,)方法把值放到了哪里,使用request.setAttribute(,)把值又放到了哪里。StackContext和ValueStack,request都有什么区别。

wtc啦啦啦的博客 3752

Struts2之ActionContext理解

在Strust2中,有一个内置对象叫ActionContext,通过该对象可以获得之前Servlet中的对象,比如:requst对象,response对象... 那么为什么可以通过ActionContext获得那些对象呢? 那是因为在ActionContext内容引用了那些对象,也就是在ActionContext内部记录了那些对象的地址,看下图 上图就是简单理解为什么通过Action

qishubiao的博客 1万+

自己实现Struts2(三)实现ActionContext

上一章自己实现Struts2(二)加载配置文件我把加载配置文件的功能实现好了,现在要实现的是ActionContext类。先来简单介绍一下ActionContext类。这是其他地方copy下来的,感觉介绍的很到位 ActionContext是Action的上下文,Struts2自动在其中保存了一些在Action执行过程中所需的对象,比如session, parameters, locale等。S

腹黑大壁花 1289

通过ActionContext获取request session application 以及ActionContext的简单解析

ActionContext:action的上下文对象。 获取application : // 获取ActionContext对象 是action的上下文对象 ActionContext actionContext = ActionContext.getContext(); // 获取到application对应的map 并且向其中添加一个属性 Map<String, Obj...

请叫我书生的博客 2029
上一篇: SSH整合(2) - struts-types
下一篇: struts2: Constant Configuration
ForWayfarer
博客等级 码龄20年 60粉丝 96原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值