struts2的valuestack

每当请求一个action之后就会创建一个valuestack并将相关的对象push到这个statck中。而valuestack是个什么结构呢?就是包含一个map和stack的结构,如图示

OGNL

在这之前,需要了解一下OGNL,OGNL在之前的印象中用的最多的是在通常的jsp页面用于显示数据的类似于EL表达式或者JSTL这样一个的标签语言。其实OGNL实际上是一个用来存储和调用对象以及对象属性的强大的表达式语言。全称为对象图导航语言,它的存在是为了在不能使用java语言的地方使用OGNL或简化java语言。第一个功能不能使用java语言的地方,就是常见的jsp页面,用来显示数据的。

第二个功能:使java语言更加简洁

例如:

Public class person{
Private Company company;
Public void set….
}
Public class Company{
Private Country country;
Public void set…
}
Public class Country{
Private String name;
……
}
 

这样一个需求通过person取得country。

第一种方案:java普通方式

Person.getCompany().getCountry().getName();

第二种方法:OGNL表达式

Ognl.get("Company.country.name",person)

Getvalue("ognl表达式",root对象)。如上示例,Company.country.name即为ognl表达式,而person即为root对象

valuestack

马上回来,valuestack是在ognl基础上做的一个封装,本质也是用来存取数据。如图valuestack的结构分为一个map和一个context结构,常用方法为setValue和findValue.

Root

1.栈结构

2.继承arraylist,扩展push和pop方法

3.每次action请求,则讲相应的action对象及相关对象压入栈中;

Context

1.map结构

2.为什么在有一个root之后还会存在一个map结构呢?因为valuestack是基于OGNL来封装的,而OGNL中只会存在一个根对象。但是在一般情况下,不仅仅只存在一个root对象,所以valuestack又对ognl进行了封装。使之能够处理多个根对象的数据结构,通常存放了page
session application parameter attr等对象。

和ognl结合来取值

1.通常情况在jsp页面中结合struts2的标签,利用ognl表达式即可取到在valuestack中的值。如name,这样就会在valuestack首先去查找在context中的findValue("name")这样方法取得对应的值;如若没有则去map中调用get("name").getName();取得对应的value。

时间: 2024-10-13 22:28:41

struts2的valuestack的相关文章

Struts2中ValueStack结构和总结

[ValueStack和ActionContext的关系] 首先,从结构上来看ValueStack是ActionContext的一个组成部分,是对ActionContext功能的扩展.ActionContext是一个容器结构,是Struts2中用于数据存储的的场所,而ValueStack则是一个具备表达式引擎能力的数据结构,提供了一个可以进行表达式引擎的计算场所.Struts2将ValueStack置于ActionContext目的是为静态的数据添加动态的计算能力.以下也是ValueStack和

Struts2之ValueStack笔记

1.web基础知识——redirect和dispatch的区别 “redirect”方式中,服务器做的工作是处理浏览器请求然后告诉浏览器你访问的资源在另一位置(url),然后浏览器再次发起请求访问指定的资源: “dispatch”方式中,服务器会把浏览器的请求看做一种资源(request),这份资源会在服务器中流通,不同处理程序都能对其加工处理: respone在这两种不同方式中也有这种区别: 在struts2中,我认为理解redirect和dispatch的区别很重要. 2.没有读struts

深入分析JavaWeb 48 -- Struts2中OGNL表达式与ValueStack

一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语言. OGNL相对其它表达式语言具有下面几大优势: 1.支持对象方法调用,如xxx.doSomeSpecial(): 2.支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名 | 值名],例如:@[email protected]('foo %s', '

struts2.1.6教程四—二、OGNL与ValueStack(VS) (ActionContext 、ValueStack 、Stack Context

ActionContext 一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() ValueStack 由OGNL框架实现 可以把它简单的看作一个栈(List) . Stack Object:放入stack中的对象,一般是action. Stack Context(map):stack上下文,它包含一系列对象,包括request/session/attr/application ma

Struts2 - 常用的constant总结

见注释 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--

Struts2

为什么要用Struts2? 这里列举一些Servlet的缺点: 1.每写一个servlet在web.xml中都要做相应的配置.如果有多很servlet,会导致web.xml内容过于繁多. 2.这样的结构不利于分组开发. 3.在servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数.这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数. 4.如果一个servlet中有很多个方法,则必须采用传递

小学生之浅谈Struts2与struts1的运行机制

Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.(面向对象思想) 2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器. 3.form填充:struts的总控制器ActionServlet在用户提交请求时将数

struts2学习笔记(一)

一.struts2和struts1的区别 1.Action类 a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口 b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象. 2.线程模式 a) Struts1的Act

(转) STRUTS2中的OGNL

OGNL表达式是(Object-Graph Navigation Language)是对象图形化导航语言.OGNL是一个开源的项目,struts2中默认使用OGNL表达式语言来显示数据.与serlvet中的el表达式的作用是一样的.OGNL表达式有下面以下特点: 支持对象方法调用,例如:objName.methodName(); 支持类静态的方法调用和值访问,表达式的格式为 @[类全名(包括包路经)] @[方法名 |  值名] 例如: @[email protected]('foo%s','ba