【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

浙公网安备 33010602011771号