struts2中 ServletActionContext与ActionContext区别

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化 本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。 阅读详情

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的上下文对象。

    <pre name="code" class="java">ActionContext ctx = ActionContext.getContext();
    ctx.put("liuwei", "andy"); //request.setAttribute("liuwei", "andy");
    Map session = ctx.getSession(); //session
    HttpServletRequest request = ctx.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
    HttpServletResponse response = ctx.get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);</pre><br>
<p></p>
<pre></pre>
<br>
<br>
<p></p>
<p><span style="font-size:16px">细心的朋友可以发现这里的session是个Map对象, 在Struts2中底层的session都被封装成了Map类型.
<br>
</span></p>
<p><span style="font-size:16px">我们可以直接操作这个Map对象进行对session的写入和读取操作, 而不用去直接操作HttpSession对象.</span></p>
<p><span style="font-size:16px">方法二:使用org.apache.struts2.ServletActionContext类</span></p>
<p><strong></strong></p><pre name="code" class="java">    public class UserAction extends ActionSupport {

        //其他代码片段

        private HttpServletRequest req; 
    //  private HttpServletRequest req = ServletActionContext.getRequest(); 这条语句放在这个位置是错误的,同样把这条语句放在构造方法中也是错误的。
        public String login() {
            req = ServletActionContext.getRequest(); //req的获得必须在具体的方法中实现
            user = new User();
            user.setUid(uid);
            user.setPassword(password);
            if (userDAO.isLogin(user)) {
                req.getSession().setAttribute("user", user);
                return SUCCESS;
            }
            return LOGIN;
        }
        public String queryAll() {
            req = ServletActionContext.getRequest(); //req的获得必须在具体的方法中实现
            uList = userDAO.queryAll();
            req.getSession().setAttribute("uList", uList);
            return SUCCESS;
        }

        //其他代码片段
    }</pre><br>
<br>
<p></p>
<p><span style="font-size:16px"><strong>(2)IoC方式(即使用Struts2 Aware拦截器)</strong></span></p>
<p>要使用IoC方式,我们首先要告诉IoC容器(<a href="http://lib.youkuaiyun.com/base/docker" class="replace_word" title="Docker知识库" target="_blank" style="color:#df3434; font-weight:bold;">Container</a>)想取得某个对象的意愿,通过实现相应的接口做到这点。</p>
<pre name="code" class="java">    public class UserAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
        private HttpServletRequest request; 
        private HttpServletResponse response; 
        public void setServletRequest(HttpServletRequest request) {
            this.request = request; 
        }
        public void setServletResponse(HttpServletResponse response) {
            this.response = response; 
        }
        public String execute() { 
            HttpSession session = request.getSession(); 
            return SUCCESS; 
        }
    }</pre><br>
<br>

R语言pls包实战:手把手教你用偏最小二乘(PLS)搞定高维数据回归(附完整代码与数据标准化避坑指南) 本文详细介绍了如何使用R语言的pls包进行偏最小二乘(PLS)回归分析,特别针对高维数据回归问题。通过完整的代码示例和数据标准化避坑指南,帮助读者掌握从数据预处理到模型优化的全流程,解决实际应用中的常见问题。 阅读详情

相关推荐

电子产品的老化测试有哪些类型?

因此,越来越多的人在寻找“已知合格的测试连接器”,即经过测试具有可靠性和有效性的测试连接器,可以在老化测试中制定优化方法。例如对于芯片来说,不同的封装有不同的老化测试座,QFP老化测试座,QFN老化测试座等。老化测试时,专用老化电路板上的元件将承受等于或高于其额定工作条件的压力,以消除任何在额定寿命之前过早失效的元件。静态老化:在此类系统中,将测试设备安装到老化板上的插座中,然后放入老化箱中,其中每隔12至24小时施加电源和高温。动态老化:在动态老化系统中,设备以老化速度设定的最大速率进行测试。

软件技术的专栏 1839

Struts2

1.Struts2入门 1.1 入门案例 添加struts2相关依赖 添加web.xml,加载struts2配置 编写index.jsp页面 编写Action控制器 编写struts.xml文件 1.1.1 添加struts2相关依赖 在pom.xml文件中加入struts2的依赖代码 <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</a

qq_52269841的博客 529

拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,总算是跑通了。

/保存的文件个数这里之所以需要用到委托,直接更新textbox文本中的内容,以及复制picturebox的image会提示不是从齐创建的线程调用。

morsth的博客 4814

struts2中ActionContext与ServletActionContext

文章目录1 ActionContext1.1 ActionContext的线程安全性1.2 访问的是Map1.3 使用SessionAware接口1.4 使用其它包装接口2 ServletActionContext2.1 ServletActionContext概述2.2 基本使用2.3 通过IOC/DI的方式来获取相应的Servlet对象2.3.1 修改Action2.3.2 修改页面3 ActionContext和ServletActionContext 1 ActionContext 我们知道,Act

上善若泪 628

ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法

本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。

weixin_29189003的博客 407

Gitee自动创建PR之——评审模式

一 创建PR的常规操作 本地更新主干(一般为master分支),基于主干新建一个分支并(如Dev分支)切换; 进行新的需求开发; 将这个分支推送到远端; 打开 Gitee ,进入创建 Pull Request 界面; 选定目标分支(及我们需要合并到主干分支的分支,一般即为我们的开发分支); 填写 Title 以及 Description; 点击提交 Pull Request。 二 更快的常见PR的方式— — 评审模式 现在 Gitee.

calm_encode的博客 2990

Struts2中的ActionContext和ServletActionContext

总结: ActionConext:即Action上下文,可以在Action中直接获取请求(Request)或会话(Session)的一些信息。 通过ActionContext取得我们的HttpSession: Map session =ActionContext.getContext().getSession(); ServletActionContext: ServletActionC

星晴coral 1238

拼多多全站商品SKU数据爬虫实战:Python自动化采集与清洗

在电商数据分析领域,SKU(Stock Keeping Unit,库存量单位)数据是洞察商品策略、价格体系和市场竞争格局的核心抓手。本文以拼多多平台为研究对象,系统讲解如何利用Python构建一套完整的全站商品SKU自动化采集与清洗流程。文章涵盖目标分析与反爬策略、网络请求模拟、数据解析、分布式存储、数据清洗与标准化,以及调度与运维等全链路环节,并提供可直接运行的代码示例。拼多多API返回的数据结构大致如下(已脱敏):json"goods_name": "某品牌运动鞋",

2201_76125261的博客 216

ActionContext和ServletActionContext的区别

什么是MVC    1.Model模型           模型的职责是负责业务逻辑,包含两部分:业务数据和业务处理逻辑.比如实体类, DAO,Service都属于模型层    2.View视图           视图的职责是显示界面和用户交互(收集用户信息)。属于视图的类是不包含业务 逻辑和控制逻辑的JSP    3.Controller控制器           控制器是模型

u012853826的专栏 1929

【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)

实现功能:代码下载地址:下载地址 1)基于深度学习的目标检测;2)基于雷达的距离估计和预测;3)多传感器感知结果融合模块。 相机感知模块解析 4. Run nodes: python3 fusion_node/main.py python3 gps_node/main.py python3 radar_node/main.py python3 2d_detection_node/main.py #(additional instructions in 2d_detection_node/README.m

踟蹰横渡口,彳亍上滩舟。 9950

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2186

struts2——ServletActionContext

  org.apache.struts2.ServletActionContext  有很多NB方法,获取值栈,获取HttpServletRequest,获取ServletContext。下面举例什么时候用到这些东东。   1. 比方说在拦截器中加入了你写的几个对象,现在要在action中取出值栈中的某个对象: ValueStack vs = ServletActionContext.g...

yangzhongmin21的专栏 214

ABAP CDS 视图的 SAP 缓冲全解析:从 DDIC-based 到 View Entity Buffer 的最佳实践与可运行示例

本文深入探讨了SAP ABAP CDS视图中的缓冲机制,重点介绍了在DDIC-based CDS视图中使用@AbapCatalog.buffering.*注解以及在CDS View Entity中使用独立缓冲对象两种配置方式。文章首先阐述了SAP缓冲的价值,特别适用于读多写少的业务场景(如主数据访问),能够显著降低数据库负载和响应延迟。核心内容分为三部分:1)DDIC-based CDS视图中的三个关键注解(缓冲状态、缓冲类型和通用缓冲键字段数)及其使用限制;2)新一代CDS View Entity中通过独

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 187

Struts2中的ActionContext和ServletActionContext的区别

转载自:http://blog.csdn.net/lushuaiyin/article/details/7017931 1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(H

kevin_love_it的博客 361

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

struts2中 ServletActionContext、ActionContext和ServletContext三者的区别

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

qq_28053779的博客 387

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

struts2----中 ServletActionContext与ActionContext区别

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

iteye_8039的博客 106

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Struts 2 ——ActionContext和ServletActionContext区别

一、ActionContext        顾名思义,ActionContext是Action执行时的上下文,实质为一个Map容器,用于存放Action在执行时需要用到request\response\session等对象,在action 和jsp间实现数据传递。可通过put,get方法可对ActionContext进行赋值取值操作;        在实际使用中,经常出现Action和JSP

Think In JAVA—Max 1172

Struts2的 ActionContext && ServletActionContext 区别

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

陈俊的马蹄印 580
上一篇: JDBC之preparedStatement
下一篇: SpringMVC 中Model、ModelMap和ModelAndView的区别和用法
broccoli2
博客等级 码龄10年 404粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值