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. protobuf使用说明

    1..proto文件为要生成.java文件的模板文件,其中包含名称空间.文件名等信息2.cmd中进入当前目录D:\JAVA\protoc-2.5.0-win323.运行 protoc.exe --ja ...

  2. struts (二)

    1.运行流程 client --->tomcat  ---> webapp  -->web.xml --->filter -->struts.xml ---->na ...

  3. 微信红包签名算法 C#代码实现

    string stringA = "appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=100001 ...

  4. poj 3080 Blue Jeans

    点击打开链接 Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10243   Accepted: 434 ...

  5. (转)C#序列化和反序列化小例子

    网友关于序列化和反序列化的总结: ①序列化基本是指把一个对象保存到文件或流中,比如可以把文件序列化以保存到Xml中,或一个磁盘文件中 ②序列化以某种存储形式使自定义对象持久化: ③将对象从一个地方传递 ...

  6. Spring SpEL表达式的理解

    Spring的IOC本质就一个容器,也就是一个对象的工厂,我们通过配置文件注册我们的Bean对象,通过他进行对象的组装与床架. SpEL表达式就是一种字符串编程,类似于JS里面的EVAL的作用,通过它 ...

  7. Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 引自http://www.blogjava.net/TiGERTiAN/archive/2008/10/25/236519.html

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

  8. webform中的Eval的使用

    <strong>.在前台html控件调用c#后台变量.</strong> 在后台的类代码里定义一个字符串.如 public partial class Index : Syst ...

  9. JavaScript对象的创建之基于构造方法+原型方式

    为了解决原型所带来的问题,此处需要通过组合构造方法和原型来实现对象的创建,将属性在构造方法中定义,将方法在原型中定义.这种有效集合了两者的优点,是目前最为常用的一种方式. function Perso ...

  10. C# Windows Forms 事件处理顺序

    事件引发的顺序对某些Windows 窗体应用来说十分重要.当某些事件需要特别处理时(如重绘窗体的某些部分),必须知道事件在运行时的确切引发顺序.下面就应用程序和控件的生命周期中的几个重要阶段的事件顺序 ...