2018.11.25 struts2与OGNL表达式的结合(高级)
两者的结合原理
底层源码分析
栈原理 先进后出
我们的valuestack其实是一个接口
在实现类中有这个参数
CompoundRoot的类继承的是ArrayList,具体实现弹栈和压栈的方法具体实现原理
在OgnlValueStack实现类中分别有弹栈和压栈的方法
查看值栈中两部分的内容 (Root部分和context) 使用DEBUG标签
页面需要倒入标签库
输入地址栏回车出现一个Deug的链接,点击即可
Root部分
默认情况下,栈中放置当前访问的Action对象
Context部分
Context部分就是ActionContext数据中心
struts2与ognl结合体现
地址栏
控制台显示null值
问题分析
由拦截器交给ognl,先走完20个拦截器在到ognl,在Action中才压栈
到底层分析
默认走的拦截器
要在这之前完成赋值
准备工作在这个拦截器的时候完成实现
在struts-default.xml 中找到这个注册拦截器的类 进去查看PrepareInterceptor类
将action类强转为Preparable接口 执行parpare方法
so在我们的Demo2Action中修改代码
在控制台能打印出来我们能的用户名了
上面是我们的第一种解决方案,下面是我们的第二种实现方案(人性化的操作)
实现模型驱动接口,获得参数属性
同样的我们继续来源码分析ModelDriven 的实现思路 这些事默认的栈需要走的拦截器
找到了具体的实现类
分析实现的方法
ValueStack stack = invocation.getStack(); 值栈ValueStack也是通过invocation来获取的,在调用push方法把对象压入栈顶
2018.11.25 struts2与OGNL表达式的结合(高级)的更多相关文章
- 2018.11.24 struts2中的OGNL表达式及两者的结合
OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...
- Struts2中OGNL表达式的用法
今天分享的是Struts2框架中的一种ognl表达式语言,主要分两个目标去学习 1.理解struts2传值的优先级 2.ognl与el的区别 一:ognl表达式语言简介 OGNL的全称是O ...
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
- struts2:OGNL表达式之#、%、$符号运用
1. OGNL表达达符号"#" 1.1 #用于访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() 注意:当系统创建了Action实 ...
- 初窥struts2(二)OGNL表达式
Struts2总结 Struts2完整的处理流程: 1 客户端发送请求,交给struts2控制器(StrutsPrepareAndExecuteFilter). 2 Filter控制器进行请求过滤 ...
- struts2 与 OGNL 表达式,jsp中 利用ognl 在valuestack中取值
在Struts2中,一个请求在终于到达Action的方法之前,Action对象本身会被压入ValueStack(实际上就是放到ValueStack的CompoundRoot中),所以Action对象是 ...
- Struts2之OGNL表达式
OGNL(Object-Graph Navigation Language的简称),对象图导航语言,它是一门表达式语言,除了用来设置和获取Java对象的属性之外,另外提供诸如集合的投影和过滤以及lam ...
- struts2(四) ognl表达式、值栈、actionContext之间的关系
今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...
- Struts2之 OGNL表达式和值栈
技术分析之OGNL表达式概述(了解) 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意 ...
随机推荐
- oracle 单实例DG(搭建篇一)
一,介绍 lodding... 二,安装前环境配置 01,依赖包的安装: yum install binutils-* yum install compat-libstdc++-* yum insta ...
- forEach和map和for方法的区别
JS中的forEach.$.each.map方法推荐 转载 2016-04-05 投稿:jingxian 我要评论 下面小编就为大家带来一篇JS中的forEach.$.each.map方法 ...
- TOJ 3660 家庭关系
描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100), ...
- unity规范
Unity VS脚本自动添加头部注释 http://blog.csdn.net/yupu56/article/details/52326930 Unity3D C#代码注释规范及文档生成 http:/ ...
- java使用netty的模型总结
一 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring-boo ...
- 基于RBAC模式的权限管理系统设计概要
很多人都知道以角色为基础的权限管理设计(RBAC),但是大部分人似懂非懂,不知道完整的权限管理系统都包括哪些内容. 在此以权限管理的使用场景来说明一下完整的权限管理内容. 一是鉴权管理,即权 ...
- java使用poi.3.10读取excel 2007以上版本(xlsx格式)
1.在使用过程中,一直报错 throw new ClassNotFoundException(name);原因:没有导入xmlbeans-2.6.0.jar包,建议在使用poi时,将所有包都导入进工程 ...
- 如何更新maven需要的jar包
第一次使用maven,检出项目生成时出现缺少xxx.jar,目录在C盘下: 拿mybatis-spring-1.2.2.jar来说,发现在C:\Users\Administrator\.m2\repo ...
- (三)HTML中的列表标签、框架集及表单标签
一.HTML的列表标签 在网页中,经常可以看到,有的内容排列如同word里面的项目编号,这就是HTML的无序排列和有序排列起到的作用.. HTML之无序排列:<ul></ul> ...
- java.util.regex.Pattern正则表达式写验证器示例
import java.util.regex.Pattern; /** * 校验器:利用正则表达式校验邮箱.手机号等 * */ public class Validator { /** * 正则表达式 ...