一、使用ContextAction
1.简单index.jsp页面
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="TestActionContext.action?name=username">TestActionContextAction</a>
<br>
<br>
<a href="TestAware.action?name=username">TestAware</a>
<%
if(application.getAttribute("date")==null)
application.setAttribute("date", new Date());
%>
</body>
</html>
2.TextActionContextAction.java
分别访问application、session、request、parameters
package Demo2;
import java.util.Map;
import org.apache.struts2.dispatcher.SessionMap;
import com.opensymphony.xwork2.ActionContext;
public class TestActionContextAction {
public String execute()
{
//获取ActionContext对象,ActionContext是Action的上下文对象,
//可以从中获取一切Action对象
ActionContext actionContext=ActionContext.getContext();
//获取application对应的Map,并向他添加一个属性
//通过调用ActionContext对象的getApplication()方法获取application对象的Map集合
Map <String,Object> applicationMap=actionContext.getApplication();
applicationMap.put("applicationKey", "applicationValue");
//获取属性
Object date=applicationMap.get("date");
System.out.println("date "+date);
// 获取session对应的Map,并向他添加一个属性
Map<String, Object> sessionMap = actionContext.getSession();
sessionMap.put("sessionkey", "sessionvalue");
System.out.println(sessionMap.getClass());
//调用这个方法使得session失效
if(sessionMap instanceof SessionMap)
{
SessionMap sm=(SessionMap) sessionMap;
sm.invalidate();
System.out.println("session失效了");
}
// 获取request对应的Map,并向他添加一个属性
//Action并没有提供getContext方法来获取request对应的MAp,手工调用get();
Map <String,Object> requestMap=(Map<String, Object>) actionContext.get("request");
requestMap.put("requestkey", "requestvalue");
//parameters只允许读数据,不能写数据,写了也没错但不能访问
Map <String,Object> parameters=actionContext.getParameters();
System.out.println(((String[])parameters.get("name"))[0]);
parameters.put("age",100);
return "success";
}
}
3、要跳转的test-actionContext.jsp文件
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h4>Test ActionContext page</h4>
application:${applicationScope.applicationKey}
<%=application.getAttribute("applicationKey") %>
<br>
<br>
session:${sessionScope.sessionkey}
<%=session.getAttribute("sessionkey") %>
<br>
<br>
request:${requestScope.requestkey}
<%=request.getAttribute("requestkey") %>
<br>
<br>
age:${parameters.age}
</body>
</html>
4.struts.xml配置文件
result 是 action 节点的子节点代表 action 方法执行后, 可能去的一个目的地
一个 action 节点可以配置多个 result 子节点.
result 的 name 属性值对应着 action 方法可能有的一个返回值.
/index.jsp
重点:name的名字要与execute()函数返回值相同
<?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-default struts-default
这个包在 struts-default.xml 文件中定义.
默认值为"/". 若 namespace 有一个非默认值, 则要想调用这个包里的Action,
就必须把这个属性所定义的命名空间添加到有关的 URI
字符串里 http://localhost:8080/contextPath/namespace/actionName.action
-->
<!--
配置一个 action: 一个 struts2 的请求就是一个 action name: 对应一个 struts2 的请求的名字
result: 结果. 表示 action 方法执行后可能返回的一个结果. 所以一个 action 节点可能会有多个 result 子节点.
-->
<struts>
<package extends="struts-default" name="Hello" namespace="/">
<action name="TestActionContext" class="Demo2.TestActionContextAction">
<result name="success">/test-actionContext.jsp</result>
</action>
<action name="TestAware" class="Demo2.TestAwareAction">
<result name="success">/test-aware.jsp</result>
</action>
</package>
</struts>
二、实现XxxAware接口
1、实现接口的TestAwareAction.java文件
1)实现接口Xxx
2)定义私有成员private Map<String,Object> Xxx;
3)实现 public void setXxx(Map<String, Object> Xxx)
package Demo2;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
public class TestAwareAction implements ApplicationAware ,SessionAware,
RequestAware,ParameterAware{
public String execute()
{
//向application中加入一个属性:applicationkey2
application.put("applicationkey2", "applicationvalue2");
//从application中读取一个属性,打印
//其他的类似对相应siyou成员赋值session parameters request
System.out.println(application.get("date"));
return "success";
}
private Map<String,Object> application;
@Override
public void setApplication(Map<String, Object> application) {
this.application=application;
}
@Override
public void setSession(Map<String, Object> session) {
// TODO Auto-generated method stub
}
@Override
public void setParameters(Map<String, String[]> parameters) {
// TODO Auto-generated method stub
}
@Override
public void setRequest(Map<String, Object> request) {
// TODO Auto-generated method stub
}
}
2.jsp显示页面如上面ContextAction的