zoukankan      html  css  js  c++  java
  • 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中修改代码

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


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

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

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

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

    找到了具体的实现类

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

  • 相关阅读:
    Hadoop学习资料收集
    sed使用详解
    shell编程001
    电影《无法触碰》
    正则表达式
    I/O重定向与管道
    bash基础知识
    用户权限模型
    Linux文件管理常用命令
    根文件系统详解
  • 原文地址:https://www.cnblogs.com/qichunlin/p/10014693.html
Copyright © 2011-2022 走看看