Struts学习之值栈的理解
转自:http://blog.csdn.net/hanxuemin12345/article/details/38559979
页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心(值栈)填充数据,所处理工作与业务无关),Action,Result。
1,经过一系列拦截器
介绍其中的两个拦截器:ModelDriven、Params;
——一个请求过来,首先创建一个值栈对象,经过初始化,然后在Map和对象栈中放入一些数据:
(1)值栈的结构:
(2)在Map和对象栈中分别存入什么数据:
Map中:request=…,session=…,application=…,attr=…,parameters=…;
对象栈中:action对象,…
——初始化完之后,还会经过很多拦截器,其中一个拦截器ModelDriven(封装model,把model放入对象栈的栈顶),一个拦截器Params(参数封装,放入参数);
(1)经过…拦截器
(2)再经过ModelDriven拦截器:
Action中实现ModelDriven<>,并实现它的方法:
Public class RoleActionextends ActionSupport implements ModelDriven<Role>{
private Role model = new Role();
private Role getModel(){ //获取栈顶的model对象
return model;
}
}
ModelDriven的作用:把model对象放入对象栈栈顶(原来栈顶是action,现在栈顶是model了)
(3)经过…拦截器
(4)再经过Params拦截器
Params拦截器的作用:封装参数。
如何封装?——做了两件事:第一,先到对象栈中封装;第二,再到Map中封装;
例子:假如,现在对象栈中有model对象在(含有id、name属性)在栈顶,action对象(含有id、age属性);页面访问地址:xx.action?id=3&name=ab&age=20&xx=00;
经过Params拦截器时,它如何将参数封装?
——先从栈顶开始找,依次找到id、name、age属性,通过各自的Set方法依次设值id=3,name=ab,age=20(注:虽然对象栈中有两个id属性,但是由于model对象的id属性在栈顶,所以找到此id属性就设值,不会继续往下找),但是对象栈中没有xx属性,于是栈中就没有这个参数了,通过对象栈就无法得到xx参数,但是Map中有parameters,可以把所有参数放入parameters中,无论在对象栈中有没有写属性,在parameters中都能得到;
——经过一系列拦截器之后,此时数据中心就有了数据,那我们就可以从中获取数据(Action、Jsp中均可从中获取并使用);
2,思考:值栈对象作用范围是什么?
——一次请求。因为每发送一个请求过来,都要经过这样一系列过程:拦截器(往值栈中压入数据)——>Action——>Request
3,细节扩充:
(1)由值栈对象,如何操作Map?
——ActionContext.getContext()
.put(k,v);//Map中放入数据
.get(k);//Map中获取数据
或:ActionContext.getContext.getValueStack()
.put(k,v);//Map中放入数据
.get(k);//Map中获取数据
(2)有了值栈对象,如何操作对象栈?
——ActionContext.getContext().getValueStack()
.push(obj);//向对象栈中放入数据
.pop();//从对象栈中获取数据
(3)所以,值栈中有了对象,Action中如何使用栈中的数据:
——通过ActionContext()操作Map,操作对象栈
(4)所以,值栈中有了对象,jsp中如何使用栈中的数据:
——通过OGNL表达式获取
OGNL表达式的格式和语法:
格式:
(1)在Struts.xml中的格式为:${ongl};
(2)在Jsp中的格式为:%{ongl};
(注:只能写在Struts2的自定义标签的属性中)
语法:
user =findValue("user");//从栈中获取user属性
#user = map.get("user"); //从Map中获取user对象
#user.name=map.get("user").getName();//从Map中获取user对象的name属性
(findvalue(expr))的查找顺序:
(1)从对象栈中查找指定名称的属性,从栈顶开始向下找,找到后就返回;
(2)如果从对象栈中没有找到属性,则从Map中查找对应的key值,找到后就返回。
例子:
4,总结
Struts学习之值栈的理解的更多相关文章
- 学习Struts--Chap05:值栈和OGNL
1.值栈的介绍 1.1 值栈的介绍: 值栈是对应每一个请求对象的数据存储中心,struts2会给每一个请求对象创建一个值栈,我们大多数情况下不需要考虑值栈在哪里,里面有什么,只需要去获取自己需要的数据 ...
- struts2学习(7)值栈简介与OGNL引入
一.值栈简介: 二.OGNL引入: com.cy.action.HelloAction.java: package com.cy.action; import java.util.Map; impor ...
- Struts2 中的值栈的理解
通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求 道服务器端 action时,就有个堆栈,如果action在服务器端 ...
- struts Value Stack 值栈
首先声明:本文是从博客园博友的文章转载过来的,感觉说的不错.在此附上地址:http://www.cnblogs.com/jerryxing/archive/2012/04/23/2467299.htm ...
- Struts2基础学习(七)—值栈和OGNL
目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义 ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...
- EL与OGNL以及值栈的理解
这里先添加下在项目遇到的问题: 这两天在做论坛项目的时候,犯了一个错误:将数据放入值栈中,结果jsp页面获取不到. 困扰了许久: 总结如下: (1)每个action对应相应页面的值栈中值的获取,在属于 ...
- Struts2学习:值栈(value stack)
1.index.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %& ...
- Ognl值栈对象及struts标签
用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...
- Struts2 (三) — OGNL与值栈
一.OGNL表达式 1.概述 1.1什么是OGNL OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...
随机推荐
- jQuery $.each用法比较详细了
以下内容非原创,来自百度文库http://wenku.baidu.com/view/4796b6145f0e7cd18425368e.html 通过它,你可以遍历对象.数组的属性值并进行处理. 使用说 ...
- Day01
1.@Test函数,执行后控制台没有输出结果? 1) 不能用静态方法,控制台会没有结果. 2) 不能把类名命名为Test,@Test不识别. 2.遍历Map集合的entrySet方法不会? 3.使 ...
- xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用
代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView ...
- css重置
清除标签的默认样式 body{margin:0;}ul,ol{margin:0 auto;padding:0;}li{ list-style:none;}dl{margin:0;}dd{margin: ...
- SQL server 2008无法连接Local服务器的解决办法
SQL的有些服务总是在关机的时候自动关闭,然后你可以打开 控制面板——管理工具——服务,然后找到SQL相关的服务,右键——属性,里面有设置,可以设成自动启动
- iOS keyChain(钥匙串)的简单使用
通常在开发中我们需要长久的保存某些值比如用户的账号密码等,对于隐私度很高的数据来说保证数据的安全性是尤为重要的.ios中的keyChain是一种很好的选择. 首先去开发者网站(https://deve ...
- WPF-MVC开发模式简要介绍
1, 建立WPF程序,并在程序中添加三个文件View,ViewMoudle,Moudle, 2,Moudle文件加中添加类,此文件夹中存放的类基本为数据类,主要是字段和属性 3 ViewMoudle文 ...
- Const #define
(1) 指针本身是常量不可变 (char*) const pContent;const (char*) pContent; (2) 指针所指向的内容是常量不可变 const (char) *pCont ...
- JS笔记 入门第三
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树) 把上面的代码进行分 ...
- 大数据技术 vs 数据库一体机[转]
http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...