ActionContextMap:是每次请求访问时存储数据的对象,每一次请求都会创建contextMap,我们可以把数据存放到map中。
key | value | 说明 |
value stack | List集合 | 以栈的方式来存储数据 |
Request | Map<String, Object>结构 | 以键值对的方式存储请求范围的数据 |
session | Map<String, Object>结构 | 以键值对的方式存储会话范围的数据 |
Application | Map<String, Object>结构 | 以键值对的方式存储应用范围的数据 |
Action | Object类型 | 当前访问的Action动作类对象 |
Parameters | Map<String, Object>结构 | 存储请求参数 |
Attr | Map<String, Object>结构 | 根据key从page,request,session,then application scopes依次查找数据 |
每一个请求访问时都会创建一个contextMap的对象,ValuesStack和contextMap的数据是关联的,可以相互转换的。
我们的数据采用两种存储的结构来存储,一个是valuesStack (Set(Map)),contextMap(map)
1.在contextMap中存取数据
- 在请求范围内存储数据
package action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
public class PersonAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println(username);
// 获得动作类的上下文
/**
* ActionContext包含了contextmap和valuestack
*/
ActionContext ac = ServletActionContext.getContext();
// 在contextmap存储数据,默认的相当于request,因为ActionContext的生命周期和request一样都是第一次请求
ac.put("username", "张三");
return super.execute();
}
}
在contextMap中取数据要使用“#”
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s" %>%
<html>
<head>
<title>$Title$</title>
</head>
<body>
<s:property value="#username"/>
<s:debug></s:debug>
</body>
</html>
- 在会话范围存储数据
package action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
public class PersonAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println(username);
// 获得动作类的上下文
/**
* ActionContext包含了contextmap和valuestack
*/
ActionContext ac = ServletActionContext.getContext();
// 在contextmap存储数据,默认的相当于request,因为ActionContext的生命周期和request一样都是第一次请求;
// 把数据存储在会话范围
ac.getSession().put("user", "周大大");
return super.execute();
}
}
取值时语法:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s" %>%
<html>
<head>
<title>$Title$</title>
</head>
<body>
<s:property value="#session.user"/>
<s:debug></s:debug>
</body>
</html>
- 在应用级别来存储数据
-
package action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; public class PersonAction extends ActionSupport { @Override public String execute() throws Exception { System.out.println(username); // 获得动作类的上下文 /** * ActionContext包含了contextmap和valuestack */ ActionContext ac = ServletActionContext.getContext(); // 在应用范围内存数据 ac.getApplication().put("pv", 23313513); return super.execute(); } }
取数据:
-
<s:property value="#application.pv"/>