两者的结合原理


底层源码分析

栈原理 先进后出

我们的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中修改代码

在控制台能打印出来我们能的用户名了


上面是我们的第一种解决方案,下面是我们的第二种实现方案(人性化的操作)

实现模型驱动接口,获得参数属性

地址栏输入 http://localhost:8080/StrutsDay03/Demo2Action2

同样的我们继续来源码分析ModelDriven 的实现思路 这些事默认的栈需要走的拦截器

找到了具体的实现类

分析实现的方法
ValueStack stack = invocation.getStack(); 值栈ValueStack也是通过invocation来获取的,在调用push方法把对象压入栈顶

2018.11.25 struts2与OGNL表达式的结合(高级)的更多相关文章

  1. 2018.11.24 struts2中的OGNL表达式及两者的结合

    OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...

  2. Struts2中OGNL表达式的用法

    今天分享的是Struts2框架中的一种ognl表达式语言,主要分两个目标去学习    1.理解struts2传值的优先级    2.ognl与el的区别 一:ognl表达式语言简介 OGNL的全称是O ...

  3. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

  4. struts2:OGNL表达式之#、%、$符号运用

    1. OGNL表达达符号"#" 1.1 #用于访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() 注意:当系统创建了Action实 ...

  5. 初窥struts2(二)OGNL表达式

    Struts2总结 Struts2完整的处理流程: 1  客户端发送请求,交给struts2控制器(StrutsPrepareAndExecuteFilter). 2  Filter控制器进行请求过滤 ...

  6. struts2 与 OGNL 表达式,jsp中 利用ognl 在valuestack中取值

    在Struts2中,一个请求在终于到达Action的方法之前,Action对象本身会被压入ValueStack(实际上就是放到ValueStack的CompoundRoot中),所以Action对象是 ...

  7. Struts2之OGNL表达式

    OGNL(Object-Graph Navigation Language的简称),对象图导航语言,它是一门表达式语言,除了用来设置和获取Java对象的属性之外,另外提供诸如集合的投影和过滤以及lam ...

  8. struts2(四) ognl表达式、值栈、actionContext之间的关系

    今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...

  9. Struts2之 OGNL表达式和值栈

    技术分析之OGNL表达式概述(了解)        1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写        * 所谓对象图,即以任意 ...

随机推荐

  1. python-OS.path.join()路径拼接

    os.path.join()函数: 第一个以”/”开头的参数开始拼接,之前的参数全部丢弃. 以上一种情况为先.在上一种情况确保情况下,若出现”./”开头的参数,会从”./”开头的参数的上一个参数开始拼 ...

  2. Nginx设置日志分割方法

    目标:nginx cronolog日志分割配置文档,每分钟分割一次NGINX访问日志. 大体步骤如下: 1.nginx日志配置 access_log /var/log/nginx/access.log ...

  3. C++ Memory System Part3 : 优化

    前面的系列我们讲了自定义new和delete操作,其中针对deleteArray的问题还有需要优化的地方.我们这次就针对POD类型进行一次优化. 下面的代码是针对POD类型的模板函数实现,分别为New ...

  4. 坐标深圳 | Kubernetes!我要用这样的姿势拥抱你

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 从去年至今,容器.Kubernetes话题的热度就持续不减,有人说基于容器 +Kubernetes 的新型 PaaS 将会成为云计算的主流: ...

  5. 生成正射影像/DSM,等高线提取

    工具:ContextCapture,Globe Mapper 方法/步骤: 1.新建项目,导入影像,提交空三运算 在ContextCapture中新建项目,添加相关影像或视频和其他相关资源,资源,提交 ...

  6. 深入理解JavaScript系列(29):设计模式之装饰者模式

    介绍 装饰者提供比继承更有弹性的替代方案. 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数). 装饰者用于通过重载方法的形式添加新功能 ...

  7. Gitflow 工作流程

    目存在两个长期分支: 主分支master 开发分支develop 前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版: 后者用于日常开发,存放最新的开发版. 其次,开发新功能或者修 ...

  8. dubbo-admin网页管理控制台

    由于近段时间在看dubbo,网上找到的这个war包发布到tomcat报错,故从git(https://github.com/apache/incubator-dubbo-ops)上重新下载编译了版本 ...

  9. SQL使用bcp方式导入,导出数据2

    select * from A_Account   EXEC sp_configure 'allow_updates' GO EXEC sp_configure 'allow_updates',0; ...

  10. 【基础笔记】tomcat安装后运行出现出现问题(the JRE_HOME environment variable is not defined correctly This environment variabl)

    之前装好tomcat后正常运行  后来重装系统后,又一次配置环境时却报错. 在网上查找了两篇文章. https://blog.csdn.net/haleyliu123/article/details/ ...