1、ActionContext翻译成中文就是Action的上下文(为什么说是上下文,是应为他的生命周期长,和我们的项目的生命周期是相同的,我们很多公共的东西都放在里面,方便存取 )ActionContext是struts2的上下文对象。

2、ActionContext其本质就是一个容器,是一个Map结构的对象。

3、ActionContext 是 Action 的上下文,存放 Action 执行过程中数据信息。ActionContext 存放 Action 的数据,ActionInvocation, request 的数据, session的数据,application 的数据,locale 的数据,conversion errors 等。每次请求时会为当前线程创建一个 新的ActionContext 。 而 ActionContext 采 用 了 ThreadLocal 的 方 式 来 存 放 ActionContext 所以 ActionContext 是线程安全

4、 ActionContext贯穿于整个Action的执行生命周期。每次接受请求后都会新建一个ActionContext对象,将ServletAP中的数据存入到ActionContext中实现struts2和servlet的解耦。由于每次请求都重新创建ActionContext对象,导致执行效率比servlet更低。

5、解耦的好处: 测试Servlet每次都需要启动容器,就是启动服务器,应为Servlet依赖于容器。但是struts2有了ActionContext它就和servlet解耦了,两者之间就没有关系了,游览器请求的数据全部放在了ActionContext里面,struts2拿到了数据后,一旦进入到struts2的执行流程后,后面都不需要servlet,就可以运行,使得测试可以不依赖于容器(测试需要专门发起请求的工具)。

6、获取 ActionContext ActionContext.getContext()获取。由于 ActionContext 是线程安全的,并且是通过静态方法获取的,所以在本线程中的非 Action 类中也可以直接访问。

7、注意点:ActionContext 是基于请求创建的,所以在非请求的线程中是不能使用 ActionContext 对象的。如:filter 的 init()方法。

8、 源码分析

每次请求都会创建一个 ActionContext

 把5个区域的值存入ActionContext中

 还有一个值栈

9、、ActionContext 中包含 6 大对象

request: 这里的request和servlet中的request不一样,它是一个Map结构,存放HttpServletRequest域中的数据。HttpServletRequest里面有两种数据,请求+手动放入的(通过setAttribute方法),但是这里的request仅仅只是存放的手动设置的数据。(request比较特殊)

session: 和servlet里面的session一样,存放的是HttpSessin域中的数据。

application: 和servlet里面的ServletContext一样,存放的是ServletContext域中的数据。

parameters:存放的是请求参数。

attr:存放的是  request session  application(也比较特殊)   attr(page-->request--->session--->application)

ValueStack(值栈):存放的是业务处理类的相关数据(属性)。

比如我的一个User对象它会被放入值栈

attr存取的是page-->request--->session--->application  先找到的那个数据

查看AttributeMap可以看到

  public Object get(Object key) {PageContext pc = getPageContext();if (pc == null) {   //PageContext里面找不到Map request = (Map) context.get("request");Map session = (Map) context.get("session");Map application = (Map) context.get("application");if ((request != null) && (request.get(key) != null)) {//request里面找return request.get(key);//找到就返回} else if ((session != null) && (session.get(key) != null)) {//同理return session.get(key);} else if ((application != null) && (application.get(key) != null)) {return application.get(key);}} else {try{return pc.findAttribute(key.toString());}catch (NullPointerException npe){return null;}}return null;}

ActionContext相关推荐

  1. struts2中 ServletActionContext与ActionContext区别

    1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...

  2. 关于ActionContext.getContext()的使用方法心得

    这个也是我在另外一位仁兄的博客中看到的,原博客的有点长,我把它精简了一下,算看起来比較方便吧. 为了避免与Servlet API耦合在一起,方便Action类做单元測试,Struts 2对HttpSe ...

  3. Struts2 之 ActionContext获取WEB资源

    2019独角兽企业重金招聘Python工程师标准>>> 1 后台代码 //0. 获取 ActionContext 对象 //ActionContext 是 Action 的上下文对象 ...

  4. 【引用】ActionContext和ServletActionContext介绍

    ActionContext(Action上下文) 1.ActionContext介绍 我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复 ...

  5. ActionContext.getContext()的用法总结

    为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest.HttpSession和ServletContext进行了封装,构造了 ...

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

    目录(?) [-] ValueStack 如何得到值栈: 如何将对象存入值栈: 让值栈执行表达式来获得值: 在JSP中跳过栈顶元素直接访问第二层: 在JSP中访问值栈对象本身(而不是它们的属性) Ac ...

  7. valuestack,stackContext,ActionContext.之间的关系

    http://blog.csdn.net/findsafety/article/details/8676763 三者之间的关系如下图所示: ActionContext 一次Action调用都会创建一个 ...

  8. 8.ActionContext类与Servlet API解耦的访问方式

    为了避免与Servlet API耦合在一起,方便Action类做单元测试,   Struts2对HttpServletRequest.HttpSession和ServletContext进行了封装, ...

  9. Struts2中ActionContext和ServletActionContext

    转自:http://blog.sina.com.cn/s/blog_6c9bac050100y9iw.html 在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在A ...

  10. Struts2中的ActionContext

    转载自:http://space.itpub.net/14734416/viewspace-485659 ActionContext(Action上下文) ActionContext介绍 通过上面用户 ...

最新文章

  1. Spring Security教程 Vol 9. AccessDecisionManager组件介绍
  2. 【机器学习】EM最大期望算法
  3. 常用WebServices返回数据的4种方法比较
  4. Java接口的几种常见用法
  5. Hibernate-逆向工程
  6. 0-1背包(动态规划)
  7. Tensorflow模型变量保存
  8. Shiro(三)——Shiro授权入门案例
  9. JavaWeb开发——软件国际化(文本元素国际化)
  10. Java中观察者模式与委托的对比
  11. [渝粤教育] 西南科技大学 英语(B)1 在线考试复习资料
  12. html网页早发白帝城,唐.李白《早发白帝城》(快乐写字)
  13. 大学网课查题公众号 查题公众号搭建 对接题库
  14. ES 7.0.1安装head和sql插件报错处理
  15. 机器学习-增量训练方法
  16. [最新]Myeclipse 10.7.1 激活工具及过程详解 亲测
  17. 如何用手机扫二维码盘点海量固定资产?
  18. 基于驾驶行为数据的UBI车险模型(转)
  19. mysql能不能创建位图索引_MySQL位图索引解决用户画像问题(简化创建流程)
  20. css中英文自动换行问题

热门文章

  1. 小白必看,react和jsx/tsx有啥关系
  2. Delphi多平台开发版本选型
  3. 【转】如何看待招聘收到的算法工程师简历远超需求?
  4. chatGPT爆火,什么时候中国能有自己的“ChatGPT“
  5. 开源啦!OMAP-L138/C6748 TI C6000 DSP/ARM 工业级核心板/口袋板/教学实验箱硬件设计开源
  6. 计算机专业科研经费排名2015,2016中国高校企业科研经费排名公布!
  7. 单细胞转录组基础知识详解
  8. 点歌系统服务器与单机版访问,单机版与网络版点歌系统,我该用哪种?
  9. 每个人都是自己的投资家
  10. 远程控制阿里云服务器(windows),并使用tcp进行通信