使用XxxAware接口

看代码:

package logan.struts2.study;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;

public class TestAwareAction implements ApplicationAware{

    public String execute(){

        //1.向application中加入一个属性:applicationKey2 - applicationValue2
application.put("applicationKey2", "applicationValue2"); //2.从application中读取一个属性,date,并打印。
System.out.println(application.get("date"));
return "success";
} private Map<String,Object> application; @Override
public void setApplication(Map<String, Object> application) {
// TODO Auto-generated method stub
this.application = application; } }

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>
<!-- action VS Action类
action:代表一个Struts2的一个请求
Action类:能够处理Struts2请求的类
-->
<package name="default" namespace="/" extends="struts-default"> <action name="TestActionContext" class="logan.struts2.study.TestActionContext">
<result>/test-actionContext.jsp</result>
</action> <action name="TestAware" class="logan.struts2.study.TestAwareAction">
<result>/test-aware.jsp</result>
</action> </package> </struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Struts2-2</display-name> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

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=logan&name=logan2">Test ActionContext</a>
<br><br>
<a href="TestAware.action?name=logan">Test Aware</a>
<%
if(application.getAttribute("date") == null){
application.setAttribute("date", new Date()); }
%> </body>
</html>

test-aware.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 Aware Page</h4>
application:${applicationScope.applicationKey2 }
</body>
</html>

访问地址:

http://localhost:8080/Struts2-3/index.jsp

还可以这样写:

package logan.struts2.study;

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{ public String execute(){ //1.向application中加入一个属性:applicationKey2 - applicationValue2
application.put("applicationKey2", "applicationValue2"); //2.从application中读取一个属性,date,并打印。
System.out.println(application.get("date"));
return "success";
} private Map<String,Object> application; @Override
public void setApplication(Map<String, Object> application) {
// TODO Auto-generated method stub
this.application = application; } @Override
public void setRequest(Map<String, Object> arg0) {
// TODO Auto-generated method stub } @Override
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub } }

选用建议:若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或parameters,则建议使用接口的方式。

如下修改代码:

package logan.struts2.study;

import java.util.Map;

import org.apache.struts2.dispatcher.Parameter;
import org.apache.struts2.dispatcher.SessionMap; import com.opensymphony.xwork2.ActionContext; public class TestActionContext { public String execute(){
//0.获取ActionContext对象
//ActionContext是Action的上下文对象,可以从中获取到当前Action需要的一切信息
ActionContext actionContext = ActionContext.getContext(); //1.获取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); //2.session
Map<String,Object> sessionMap = actionContext.getSession();
sessionMap.put("sessionKey", "sessionValue");
if(sessionMap instanceof SessionMap){
SessionMap sm = (SessionMap) sessionMap;
sm.invalidate();
System.out.println("session 失效了");
} //3.request
//ActionContext中并没有提供getRequest方法来获取Request对应的Map
//需要手工调用get()方法,传入request字符串来获取。
Map<String,Object> requestMap = (Map<String, Object>) actionContext.get("request");
requestMap.put("requestKey", "requestValue"); //4.获取请求参数对应的Map,并获取指定的参数值
//parameters这个Map只能读,不能写。如果写入,不会报错,但是也不起作用。
Map<String,Parameter> parameters = actionContext.getParameters();
System.out.println(parameters.get("name")); return "success";
} }

这样就获取不到session

sessionMap对应的Map实际上是SessionMap类型的,强转后若调用其invalidate()方法,可以使其session失效。

最新文章

  1. Android MarginEnd与MarginStart (RTL)
  2. 一致性Hash算法
  3. 2014 UESTC暑前集训图论专题解题报告
  4. Oracle 基础 数据库备份与恢复
  5. bzoj1601: [Usaco2008 Oct]灌水
  6. uri中为什么本地文件file后面跟三个斜杠, http等协议跟两个斜杠?
  7. Windows Azure上的Odoo(OpenERP)
  8. poj1503---大数加法
  9. light oj 1184 Marriage Media
  10. Pazera Free Audio Extractor 中文版 - 轻松将视频背景音乐/对话音频提取出来的免费软件
  11. 伪Ajax-iframe
  12. Bootstrap+PHP表单验证实例
  13. lua --- 局部变量
  14. MP4v2 基本使用(二)
  15. http Get和Post请求方式
  16. TC规则
  17. C 计算员工工资
  18. hdu 1251 统计难题(字典树)
  19. Hibernate与JDBC、EJB、JDO的比较
  20. PHP 生成 MySql 数据库字典

热门文章

  1. hd acm1005
  2. hd acm2025
  3. poj 1419Graph Coloring 【dfs+补图+计算最大团+计算最大独立集 【模板】】
  4. Memory Layout (Virtual address space of a C process)
  5. R 语言实现求导
  6. Codeforces 455B A Lot of Games:博弈dp【多局游戏】
  7. TinkPHP 简单知识摘要
  8. Hibernate学习---第十二节:Hibernate之锁机制&amp;乐观锁实现
  9. 一致性问题和Raft一致性算法——一致性问题是无法彻底解决的,可以说一个分布式系统可靠性达到99.99…%,但不能说它达到了100%
  10. 201621123014《Java程序设计》第四周学习总结