您的位置:首页 > 编程语言 > Java开发

Struts2 值栈概述

2017-12-03 00:00 211 查看
什么是值栈

1、之前在web阶段,在servlet里面进行操作,把数据放到域对象里面,在页面中使用el表达式获取到,域对象在一定范围内,存值和取值。

2、在struts2里面提供本身一种存储机制,类似域对象,是值栈,可以存值与取值

①在action里面把数据放到值栈里面,在页面中获取到值栈数据

3、servlet和action区别

①Servlet:默认在第一次访问时创建,创建一次,单实例对象。

②Action:访问时创建,每次访问action时候,都会创建action对象,创建多次。多实例对象。

4、值栈存储位置

①每次访问action时候,都会创建action对象

②在每个action对象都会有一个值栈对象。

获取值栈对象

获取值栈对象有多种方式

①使用ActionContext类里面的方法得到值栈对象(常用方式)

public class FormAction extends ActionSupport {

public String execute() {
ActionContext context = ActionContext.getContext();

ValueStack stack1 = context.getValueStack();

return NONE;
}
}

②验证每个action对象只有一个值栈对象

public class FormAction extends ActionSupport {

public String execute() {
ActionContext context = ActionContext.getContext();

ValueStack stack1 = context.getValueStack();
ValueStack stack2 = context.getValueStack();

System.out.println(stack1 == stack2);
return NONE;
}
}

返回结果

true


值栈内部结构

1、值栈结构分为两部分

第一部分 root,结构时list集合,一般操作的都是root里面的数据

第二部分 context,结构时map集合。



2、struts2里面标签 s:debug,使用这个标签可以查看值栈结构和存储值

HelloAction.java

public class HelloAction extends ActionSupport {

@Override
public String execute() throws Exception {

return "ok";
}
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<package name="demo" extends="struts-default" namespace="/">
<action name="hello" class="action.HelloAction">
<result name="ok">/hello.jsp</result>
</action>
</package>

</struts>

hello.jsp

<body>
<s:debug></s:debug>
</body>

运行结果



点开Debug

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: