转帖 Struts2中ActionContext介绍

在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, 甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作.
我们需要在Action中取得request请求参数"username"的值:
ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
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();
ServletActionContext
ServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了我们上面介绍的ActionContext,它提供了直接与JavaServlet相关对象访问的功能,它可以取得的对象有:
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里取得JavaServlet的相关对象:
1, 取得HttpServletRequest对象:
HttpServletRequest request = ServletActionContext. getRequest();
2, 取得HttpSession对象:
HttpSession session = ServletActionContext. getRequest().getSession();
ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问JavaServlet的相关对象.在使用ActionContext时有一点要注意:不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null.
如果我要取得Servlet API中的一些对象,如request,response或session等,应该怎么做?这里的execute不像Struts 1.x的那样在参数中引入."开发Web应用程序当然免不了跟这些对象打交道.在Strutx 2.0你可以有两种方式获得这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式.
非IoC方式
 要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态方法getContext()获取当前Action的上下文对象. 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象.
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
 如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象.
IoC方式
 要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点.具体实现,请参考例6 IocServlet.java.
例6 classes/tutorial/NonIoCServlet.java
package tutorial;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
publicclass NonIoCServlet extends ActionSupport {
private String message;

public String getMessage() {
return message;
}

@Override
public String execute() {
ActionContext.getContext().getSession().put("msg", "Hello World from Session!");

HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();

StringBuffer sb =new StringBuffer("Message from request: ");
sb.append(request.getParameter("msg"));
sb.append("<br>Response Buffer Size: ");
sb.append(response.getBufferSize());
sb.append("<br>Session ID: ");
sb.append(session.getId());

message = sb.toString();
return SUCCESS;
}
}
例6 classes/tutorial/IoCServlet.java
package tutorial;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
private String message;
private Map att;
private HttpServletRequest request;
private HttpServletResponse response;

public String getMessage() {
return message;
}

publicvoid setSession(Map att) {
this.att = att;
}

publicvoid setServletRequest(HttpServletRequest request) {
this.request = request;
}

publicvoid setServletResponse(HttpServletResponse response) {
this.response = response;
}

@Override
public String execute() {
att.put("msg", "Hello World from Session!");

HttpSession session = request.getSession();

StringBuffer sb =new StringBuffer("Message from request: ");
sb.append(request.getParameter("msg"));
sb.append("<br>Response Buffer Size: ");
sb.append(response.getBufferSize());
sb.append("<br>Session ID: ");
sb.append(session.getId());

message = sb.toString();
return SUCCESS;
}
}
例6 Servlet.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h2>
<s:property value="message" escape="false"/>
<br>Message from session: <s:property value="#session.msg"/>
</h2>
</body>
</html>
例6 classes/struts.xml中NonIocServlet和IoCServlet Action的配置
<action name="NonIoCServlet" class="tutorial.NonIoCServlet">
<result>/Servlet.jsp</result>
</action>
<action name="IoCServlet" class="tutorial.IoCServlet">
<result>/Servlet.jsp</result>
</action>
 运行Tomcat,在浏览器地址栏中键入http://localhost:8080/Struts2_Action/NonIoCServlet.action?msg=Hello%20World! 或http://localhost:8080/Struts2_Action/IoCServlet.action?msg=Hello%20World!
 在Servlet.jsp中,我用了两次property标志,第一次将escape设为false为了在JSP中输出<br>转行,第二次的value中的OGNL为"#session.msg",它的作用与session.getAttribute("msg")等同.
【GameFramework框架】7-2、GameFramework框架是否“过度设计”? 框架是否过度设计,这个问题其实我被问到很多次了。不仅仅是新手刚接触就觉得“过度设计”的评价,有些熟练的开发者也会有这种感觉。那么,这篇文章就来探究一下,为什么框架会让人感觉“过度设计”,以及框架如何设计,还有,如何让框架适应自己的节奏。 阅读详情

相关推荐

汽车OTA自动化测试解决方案

目前OTA远程升级技术已成为众多汽车制造商的标配。由于OTA升级可能会带来潜在的风险(特别是包含ECU固件更新的FOTA升级),针对OTA系统的测试过程就尤为重要。

东舟技术的博客 7759

Struts2中ActionContext介绍

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

溺水的鱼 - Later equals never. 1万+

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2287

java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lan

java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/String;)Ljava/lan 严重: Servlet.service() for servlet jsp threw exceptionjava.lang.NoSuchMethodError: com.opensymp...

zhou363667565的专栏 924

使用kmplot在线进行生存分析

欢迎关注”生信修炼手册”!kmplot是一个生存分析的在线工具,最初是设计用来对肝癌中的miRNA进行生存分析,对应的文章发表在scientific reports上,链接如下https...

庐州月光的博客 1万+

社工库2.0

#大题目 社工库2.0 ###环境 whoosh2.7 jieba 12306 python3.7 网上嫖来的网页模板(感谢站长之家 ###实现效果 建立的索引文件 好看的页面 更快的查找速度 ###实现过程 具体的实现过程比较简易,毕竟whoosh已经封装的很好了 第一步 建立索引并存储 schema = Schema(zhanghao=TEXT(stored=True), code=STORED, name=TEXT(stored=True, analyzer=

sdyinruichao的博客 2万+

Struts2学习之实现Action

引言        Action是应用的核心,开发者需要提供大量的Action类并在struts.xml文件中配置Action。Action类包含了对用户请求的逻辑处理,Action类也被称为业务控制类。那么特使如何实现的呢? 首先先看代码 import com.opensymphony.xwork2.ActionContext...

qq_41827511的博客 467

移远EC21/EC200模组休眠功耗从13mA降到6mA,我排查了这3个坑(附完整AT指令流程)

本文详细介绍了移远EC21/EC200模组休眠功耗从13mA优化至6mA的完整解决方案,涵盖硬件设计检查、AT指令配置、RTOS调度优化和固件兼容性验证等关键步骤。通过系统性的低功耗问题诊断框架,帮助IoT设备开发者有效提升电池续航能力,特别适合智能水表等电池供电场景应用。

weixin_30715523的博客 534

org.apache.struts com.opensymphony.xwork2.Action 区别

最近在刷各位大神的博客。然后自己做点练习。我做demo都是用maven,然后在一篇文章 http://blog.youkuaiyun.com/shan9liang/article/details/8690179 在使用调用Action的接口的时候发现他是用前面那个包引入Struts2但是我在实际项目中却是自动引入了opensymfony 搜了下发现这是

uiiの技术随笔 4257

RU.EXE实用指南:从基础操作到高级调试技巧

本文是RU.EXE(RW Everything)的实用指南,详细介绍了这款硬件调试工具从基础操作到高级技巧的全过程。文章阐述了RU.EXE作为直接读写硬件寄存器、内存和PCI配置空间的强大工具,如何帮助硬件工程师和开发人员高效进行底层系统调试与故障排查,并强调了安全操作的重要性。

weixin_29228203的博客 278

Spring WebFlux响应式编程实战(三):优雅处理异常与高效调试技巧

本文深入探讨了Spring WebFlux响应式编程中的异常处理与调试技巧。文章通过电商订单流处理场景,详细解析了Reactor核心操作符onErrorReturn、onErrorResume和onErrorMap的实战应用,并介绍了如何构建@ControllerAdvice和WebExceptionHandler全局异常处理防线。同时,提供了使用.log()操作符、Hooks.onOperatorDebug()及BlockHound进行高效调试的方法,旨在帮助开发者构建健壮、可维护的响应式应用。

weixin_29252171的博客 66

java actioncontext_Action访问ActionContext | 学步园

在Struts2.0中,Action已经与Servlet API完全分离,这使得Struts2.0的Action具有了更加灵活和低耦合的特性,与Struts1.0相比较而言是个巨大的进步。虽然Struts2.0的Action已经与Servlet API完全分离,但我们在实现业务逻辑处理时经常需要访问Servlet中的对象,如Session、Application等。Struts2.0 提供了一个名...

weixin_35734408的博客 299

Python爬虫实战:从巨潮网批量抓取上市公司年报JSON数据

网络爬虫作为自动化数据采集的核心技术,其原理是通过模拟浏览器行为向服务器发送HTTP请求并解析响应,从而高效获取结构化信息。在金融数据分析领域,这项技术价值尤为突出,能够将研究人员从繁琐的手工数据收集中解放出来,聚焦于更高阶的模型构建与价值挖掘。典型的应用场景包括上市公司财务研究、市场趋势分析和风险预警系统开发。本文以Python的requests库为核心工具,详细解析如何通过分析巨潮资讯网的JSON数据接口,构建一个稳定、高效的上市公司年报数据采集管道,并重点探讨了接口逆向、分页爬取、PDF文件下载等关键

weixin_42529366的博客 1234

struts2 编码拦截器

[code="java"] package ui.interceptor; import java.io.UnsupportedEncodingException; import java.util.Map; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsConsta...

ylx525的博客 152

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Struts2之初探Ioc模式

<br />声明:这是转帖的<br />版本 Struts2.1.2<br />lib列表<br /><br />1 非IoC方式<br />com.opensymphony.xwork2.ActionContext,我们可以通过它的静态方法getContext()获取当前Action的上下文对象。<br /> <br /><br /> <br />2 IoC方式<br /> <br />3 程序代码<br /> <br />IoC方式:<br /> <br /><br /> <br />servlet.j

bruce_sky的专栏 1272

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

struts2框架深入

一、获取值栈(2种) 浏览器输入: localhost:8080/txkt/ognl.action OgnlAction.java package com.test.ognl; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.ope...

weixin_45191282的博客 321

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IDEA配置Struts 2异常 之java: 程序包com.opensymphony.xwork2不存在

最近开始尝试了一下用IDEA 开发 struts 2 项目,深刻的感受到了什么叫强大,不过有的时候也会碰到一些难以解决的错误。这里跟大家分享一下我遇到的一些问题和解决办法。 错误的具体内容为: Error:(3, 31) java: 程序包com.opensymphony.xwork2不存在 Error:(10, 34) java: 找不到符号 符号: 类 ActionSupport

cupid_qx的博客 2万+

com.opensymphony.xwork2.ActionSupport类源码

version : xwork-2.1.0 /* * Copyright (c) 2002-2006 by OpenSymphony * All rights reserved. */ package com.opensymphony.xwork2; import java.io.Serializable; import java.util.Collection; import java

一个执着的程序员 8224

Struts2学习笔记(4)-ActionSupport类及Action接口详解

一、ActionSupport类 com.opensymphony.xwork2.ActionSupport类时默认的动作类。 只要某个动作声明没有给出一个动作类,Struts就会替它创建一个这个类的实例。 在编写动作类时也需要对这个类进行扩展。 该类提供了许多默认方法。这些方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等。。 如果让开发者的Act

MasterSpecter的博客 1416

如何在Struts 2中获取ServletContext

在Struts 2中,可以使用以下两种方法来获取ServletContext对象。 1. ServletActionContext 直接从org.apache.struts2.ServletActionContext获取ServletContext对象。 import javax.servlet.ServletContext; import org.apache.struts2.Se...

一名可爱的技术搬运工 457

SSH:Struts2框架(Action的配置)

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。 该方法如下:    public String execute() throws Exception Struts2并不是要求所有编写的act

流年少年 5806

Struts2框架之Action获取请求参数的四种方式

方式一:通过request获取 ①、LoginAction.java文件 package cn.hestyle.web.action; import org.apache.struts2.ServletActionContext; import javax.servlet.http.HttpServletRequest; public class LoginAction { priv...

hestyle的博客 1838

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

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

请叫我书生的博客 2029

claanotfound.opensymphony.xwork2.ActionContext问题

使用struts导入struts2-core.2.3.24后启动tomcat解决类不存在的问题 重新导入类!!简单粗暴 缺少哪个类就去导入该类 buildpath —add extern jar

weixin_42199709的博客 902

Struts2访问Servlet的三种方式

Struts2访问Servlet的三种方式 基本介绍      在Struts2中,Action并没有直接和Servlet API耦合。虽然Struts2 中的Action访问Servlet API麻烦一些,但是这却是Struts2中Action的重要改良之一,方便Action进行单元测试。      尽管Action和Servlet API解耦会带来很多好处,然而在Action中完全不访问

Switch的博客 7238

项目启动报:com.opensymphony.xwork2.config.ConfigurationException: Unable to load configuration.

使用struts2实现上传下载的项目,写完后启动项目报:com.opensymphony.xwork2.config.ConfigurationException: Unable to load configuration. at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationM

gplihf的博客 1万+
上一篇: hibernate集合映射inverse和cascade详解
下一篇: iptables limit
COMMIMENT
博客等级 码龄18年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值