3.2 OGNL上下文-ContextMap

是struts2框架中封装数据最大的容器,封装了我们一次请求可能会用到的所有数据(请求参数、请求域、session
域)

它是一个Map结构,Map的key是String类型,Map的Value是Object类型,里面的内容包括但不限于以下内容:
application、session、value stack(root)、action(the current action)、request、parameters、attr(searches page、request、session、then application scopes)

  1. application
    是一个Map,里卖弄存的是应用域中的所有数据
  2. session
    Map,会话域中所有数据
  3. request
    Map,请求域中所有数据
  4. value stack(root)
    是一个对象,List结构
  5. action(the current action)
    是一个对象,表示当前正执行的action对象
  6. parameters
    Map,里面存的是请求参数
  7. attr(searches page、request、session、then application scopes)
    Map,里卖弄存的是4大域中的顺序,按照由小到大的顺序找

123学过,567不管,页面域使用场景很少,模型驱动可以代替6,在ValueStack中有一个当前执行的动作类对象。

ActionContext的作用

它是一个工具类,里面提供了可以便捷操作ContextMap的方法
创建时间:
每次请求都会创建新的。放在struts2的核心过滤器中,doFilter方法

通过ActionContext存入数据

Demo1Action.java

package com.itheima.web.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/*
 * ActionContext数据存取
 * */

public class Demo1Action extends ActionSupport {
    /*
     * 通过ActionContext往ContextMap中存入数据
     * 
     * contextMap           hello context map
     * */
    
    public String demo1() {
        //获取ActionContext对象
        ActionContext context = ActionContext.getContext();//从当前线程上获取
        //存入数据
        context.put("contextMap", "hello context map");
        return SUCCESS;
    }
}

demo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%--设置浏览器的页面编码 --%>
    <%--设置JSP编译成Servlet时使用的编码,可以只写这一句 --%>
    
<%@ taglib uri="/struts-tags" prefix="s" %>



<%--规定 HTML 文档的字符编码 --%>


ActionContext的数据存取


<%--借助struts2的标签库查看ContextMap中的内容 --%>




3.2 OGNL上下文-ContextMap_第1张图片

往其他域中存数据

public class Demo1Action extends ActionSupport {
    /*
     * 通过ActionContext往ContextMap中存入数据
     * 
     * contextMap           hello context map
     * 
     * 往应用域中存入数据,用两种方式
     * applicationMap         hello application map
     * applicationAttr        hello application attr
     * 
     * 往会话域中存,两种方式
     * */
    
    public String demo1() {
        //获取ActionContext对象
        ActionContext context = ActionContext.getContext();//从当前线程上获取
        //存入数据
        context.put("contextMap", "hello context map");

        //往应用域中存入数据
        //第一种,使用原始ServletAPI对象ServletContext
        ServletContext applicationAttr = ServletActionContext.getServletContext();
        applicationAttr.setAttribute("applicationAttr", "hello application attr");
        //第二种,根据key从ActionContext获取应用域的map,往map中存入数据
        Map applicationMap = context.getApplication();
        applicationMap.put("applicationMap", "hello application map");
        
        
        //往会话域存
        //使用ServletAPI的HttpSession
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.setAttribute("sessionAttr", "hello session attr");
        //获取key为session的map
        Map sessionMap = context.getSession();
        sessionMap.put("sessionMap", "hello session map");
        
        return SUCCESS;
    }
}

OGNL表达式获取ActionContext中的数据

demo1.jsp

<%--使用struts2的s:property标签和OGNL表达式获取ActionContext存入的数据 
    获取Map中的数据,OGNL表达式写法:
    #key
    如果还想继续向下获取,使用 .key 的方式
--%>


3.2 OGNL上下文-ContextMap_第2张图片

你可能感兴趣的:(3.2 OGNL上下文-ContextMap)