1. ValueStack&ActionContext(非常重点:值栈)

    1、针对用户的每次动作访问,都会创建属于自己的ValueStack对象

    2、ValueStack中的的常用方法:功能一定要知道干什么的。实现类OgnlValueStack

  • getContext():返回的是一个Map<String,Object>
  • *getRoot():返回的是一个CompoundRoot。

    CompoundRoot就是一个ArrayList的子类(就是一个List)。实现了一个栈结构

    CompoundRoot():默认的构造方法。实际就是创建一个List集合

    CompoundRoot(List):用一个集合来初始化一个CompoundRoot对象

    cutStack(int):按照集合中的索引,剪出一个新的List集合

    peek():取集合中的第一个元素。get(0)

    pop():从集合中删除第一个元素

    • push(Object):向集合中的第一个元素位置插入数据
      peek():CompoundRoot中的第一个元素。get(0)
    • pop():从CompoundRoot集合中删除第一个元素
    • push(Object):向CompoundRoot集合中的第一个元素位置插入数据
    • size():获取 CompoundRoot这个集合的大小
    • setValue(String,Object):第一个参数,是OGNL表达式。向自己(getContext())得到那个Map中尝试放东西。
    • setParameter(String,Object):第一个参数,是OGNL表达式。向自己(getContext())得到那个Map中尝试放东西。
    • findString(String expr):返回的是一个String类型的,否则报错.第一个参数,是OGNL表达式。
    • findValue():返回的是一个Object。第一个参数,是OGNL表达式。

     

    3、ActionContext

    static ThreadLocal<ActionContext> actionContext = new ThreadLocal<ActionContext>();

    每个线程都会有唯一的ActionContext,且一个线程中只有一个ActionContext。

    getApplication():返回的是一个Map

    getContext():放回的当前线程上的ActionContext对象

    getContextMap():返回ActionCOntext中的那一个Map

    getParameters():返回的是一个Map

    getSession():返回的是一个Map

    getValueStack():返回的是当前线程中的ValueStack实例

    get(String):从ActionContext的Map中获取数据

     

    最终总结:

    4、ServletActionContext决定contextMap中会存哪些数据

    总结:都是从ActionContext的那个大Map中获取的。

     

    5、在执行动作方法前,contextMap中放了以下东西

    contextMap中

     

    key 

    value 

    备注

    request

    ServletRequest中的那个Map

     

    session

    HttpSession中的那个Map

     

    application

    ServletContext中的那个Map

     

    parameters

    请求参数Map<String,String[]>

     

    attr

    也是一个AttributeMap

    获取数据依次从contextMap中的requestMap、sessionMap、applicationMap中搜索

         

     

十八、ValueStack&ActionContext(非常重点:值栈)的更多相关文章

  1. java并发编程(十八)阻塞队列和阻塞栈

    阻塞队列 阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue.Dela ...

  2. Struts2 - 值栈(ValueStack)

    1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...

  3. valueStack(值栈)

    值栈 值栈(ValueStack)就是 OGNL 表达式存取数据的地方.在一个值栈中,封装了一次请求所需要的所有数据. 在使用 Struts2 的项目中,Struts2 会为每个请求创建一个新的值栈, ...

  4. OGNL表示式使用和值栈

    另外值得参考博客:http://blog.csdn.net/resigshy/article/details/7560573 OGNL是Object Graphic Navigation Langua ...

  5. Java中的值栈

    OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...

  6. Struts2知识点小结(三)--值栈与ognl表达式

    1.问题一 : 什么是值栈 ValueStack        回顾web阶段 数据交互问题?        客户端提交数据  到  服务器端    request接受数据+BeanUtils实体封装 ...

  7. 值栈(Structs2)

    1. 关于值栈: 1). 登陆 时, ${userName} 读取 userName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ValueStack: I. ...

  8. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. 关于Struts2中的值栈与OGNL表达式

    1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. ...

  10. 值栈和OGNL 之 7.1 值栈

    7.1  值栈 7.1.1  值栈是什么 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Resu ...

随机推荐

  1. Python进阶01 词典

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 基础教程介绍了基本概念,特别是对象和类. 进阶教程对基础教程的进一步拓展,说明Py ...

  2. WCF Windows Service Using TopShelf and ServiceModelEx z

    http://lourenco.co.za/blog/2013/08/wcf-windows-service-using-topshelf-and-servicemodelex/ There are ...

  3. 关于lib,dll,.a,.so,静态库和动态库的解释说明

    [转]关于lib,dll,.a,.so,静态库和动态库的解释说明 目录 1 什么叫程序库 2 什么是lib,什么是dll,什么是.a,什么是so,什么是静态库,什么是动态库 3 补充说明 4 作者 什 ...

  4. JAVA中压缩与解压缩

    以压缩Zip文件为例.主要是通过ZipOutputStream类实现.解压缩主要使用ZipFile类和ZipInputStream以及ZipEntry类. package main; import j ...

  5. java:jdk环境变量配置+tomcat环境变量配置

    一:JDK1.先安装jdk  查看jdk版本:   DOC下输入java -version2.配置环境变量(添加系统变量)  JAVA_HOME      D:\study\jdk-6\jdk-6(j ...

  6. wince6.0应用程序自启动

    主要思想:将应用程序添加到image里,然后用应用程序代替桌面应用程序,从而使应用程序自启动. 主要步骤:                 1.将应用程序MyApp.exe拷贝到wince600\OS ...

  7. memcpy、memmove、memset

    void * memcpy(void * dst, const void * src, size_t count) { void *res=dst; while (count--) { *(char* ...

  8. 用FireBreath制作浏览器插件

    参考: http://blog.csdn.net/z6482/article/details/7486921 1.下载firebreath, 安装cmake, python. 2.在FireBreat ...

  9. vc 递归删除非空文件夹

    我觉得这是一个非常不错的递归例子 头文件 #pragma once #include <atlstr.h> #include <io.h> #include <strin ...

  10. C and C++ 如何嵌套使用

    1. 要知道extern "C"的含义: (1) extern是C/C++中表明函数和全局变量作用范围的关键字, 该关键字表明其申明的函数和变量可以在本模块或者其他模块中使用. ( ...