【Struts2】07 OGNL & 值栈存取

入门案例:

JSP引入OGNL:

<%--
  Created by IntelliJ IDEA.
  User: User-Dai
  Date: 2020/8/29
  Time: 18:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

</body>
</html>

类似JSTL表单式:

<s:property value="'hhh'.length()"/>

 

注意一个非常特别的问题,Servlet每次访问的时候服务器只会存在一个Servlet实例提供访问

但是Action不一样,每次访问都会创建新的实例,每个Action对象中都只有一个值栈对象

值栈对象也是相互独立的

 

获取值栈对象的方式:

判断是否为值栈实例是否为单例对象?

 

栈的结构就是弹夹,先进后出,第一个放进去的子弹最后一个打出来

值栈的两个部分:

ROOT是一个List集合

CONTEXT是一个Map集合

源码:

CompoundRoot.java

package com.opensymphony.xwork2.util;

import java.util.ArrayList;
import java.util.List;

public class CompoundRoot extends ArrayList {
    public CompoundRoot() {
    }

    public CompoundRoot(List list) {
        super(list);
    }

    public CompoundRoot cutStack(int index) {
        return new CompoundRoot(this.subList(index, this.size()));
    }

    public Object peek() {
        return this.get(0);
    }

    public Object pop() {
        return this.remove(0);
    }

    public void push(Object o) {
        this.add(0, o);
    }
}

OgnlContext.java

package ognl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import ognl.enhance.LocalReference;

public class OgnlContext implements Map

 

posted @ 2020-09-13 20:47  emdzz  阅读(158)  评论(0)    收藏  举报