WebWork介绍-ActionContext(Action上下文)

转载 2006年06月04日 22:31:00
WebWorkActionContext(Action上下文)
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”);
ActionContextcom.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
ServletActionContextcom.opensymphony.webwork. ServletActionContext),这个类直接继承了我们上面介绍的ActionContext,它提供了直接与JavaServlet相关对象访问的功能,它可以取得的对象有:
1、   javax.servlet.http.HttpServletRequestHTTPservlet请求对象
2、   javax.servlet.http.HttpServletResponse;HTTPservlet相应对象
3、   javax.servlet.ServletContextServlet 上下文信息
4、   javax.servlet.ServletConfigServlet配置对象
5、   javax.servlet.jsp.PageContextHttp页面上下文
 
 
下面我们看看几个简单的例子,让我们了解如何从ServletActionContext里取得JavaServlet的相关对象:
1、   取得HttpServletRequest对象:
HttpServletRequest request = ServletActionContext. getRequest();
2、   取得HttpSession对象:
HttpSession session = ServletActionContext. getRequest().getSession();
 
ServletActionContextActionContext有着一些重复的功能,在我们的Action中,该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问JavaServlet的相关对象。在使用ActionContext时有一点要注意:不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null

关于在Struts2中ActionContext是何时创建的

首先我们要知道ActionContext是线程安全的,在每次执行Action之前都会创建新的ActionContext,也就是说在同一个线程里ActionContext里的属性是唯一的,这样我的Act...
  • u011496144
  • u011496144
  • 2017年07月10日 17:03
  • 340

Action Context中值栈(value Stack )栈上下文(Stack context)的个人理解

Action Context就是Stack Context栈上下文; Stack Context、ActionContext或者OGNL上下文都是一个东西:Ognl.getValue(exp,con...
  • itelyder
  • itelyder
  • 2015年10月20日 00:22
  • 3012

从struts2的action中看ActionContext的存储结构

本篇将建立测试用例,在action中以打断点的形式查看ActionContext中的数据结构。 不管多线程的情况,就以当前线程来说 一、预先了解 在ActionConext中,每一个线程都有一些数...
  • q291611265
  • q291611265
  • 2015年08月05日 21:05
  • 1548

WebWork深入浅出

原文链接地址:http://www.blogjava.net/moxie/archive/2006/10/20/76375.html 前言 本篇文章并没有太多WebWork 的实战代码细节。本人非常希...
  • u010955843
  • u010955843
  • 2015年09月09日 16:16
  • 941

为什么el中能访问action的属性

今天一个哥们学习struts2,尝试使用OGNL,由于关联性吧,就又跳到EL上面,结果神奇的事情发生,他用EL表达式从request域里面居然拿到了action钟的属性,这个天崩地裂的,大家都知道st...
  • Marvel__Dead
  • Marvel__Dead
  • 2017年03月02日 22:14
  • 890

关于ActionContext.getContext()取得的值是什么,和struts2如何获取request,session,appliaction作用域

关于ActionContext.getContext()取得的值,和struts2如何获取request,session,appliaction作用域...
  • u011768325
  • u011768325
  • 2015年05月13日 11:02
  • 2135

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

1.Struts2的学习中大家都会遇到action和与action对应的Action类,那么什么是action什么是action对应的Action类呢? 例如struts.xml的配置文件如下: ...
  • nihaowoshiyudong
  • nihaowoshiyudong
  • 2016年12月30日 10:37
  • 1098

EL取得action 属性的原理

今天一个哥们学习struts2,尝试使用OGNL,由于关联性吧,就又跳到EL上面,结果神奇的事情发生,他用EL表达式从request域里面居然拿到了action钟的属性,这个天崩地裂的,大家都知道st...
  • zs064811
  • zs064811
  • 2015年12月08日 23:18
  • 482

Struts2 ActionContext类操作属性的方法(请求、会话、上下文)

1、操作请求范围的属性
  • u012777182
  • u012777182
  • 2014年07月16日 09:27
  • 483

简单的访问计数器

思路:表单每次访问action,就会把上下文中的counter参数加一,jsp文件用来显示次数 LoginAction.java文件内容 package action; import com.o...
  • u010513756
  • u010513756
  • 2015年09月18日 16:06
  • 4256
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebWork介绍-ActionContext(Action上下文)
举报原因:
原因补充:

(最多只允许输入30个字)