Struts2学习第四课 通过Aware接口获取WEB资源
2024-08-28 22:27:05
使用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失效。
最新文章
- Android MarginEnd与MarginStart (RTL)
- 一致性Hash算法
- 2014 UESTC暑前集训图论专题解题报告
- Oracle 基础 数据库备份与恢复
- bzoj1601: [Usaco2008 Oct]灌水
- uri中为什么本地文件file后面跟三个斜杠, http等协议跟两个斜杠?
- Windows Azure上的Odoo(OpenERP)
- poj1503---大数加法
- light oj 1184 Marriage Media
- Pazera Free Audio Extractor 中文版 - 轻松将视频背景音乐/对话音频提取出来的免费软件
- 伪Ajax-iframe
- Bootstrap+PHP表单验证实例
- lua --- 局部变量
- MP4v2 基本使用(二)
- http Get和Post请求方式
- TC规则
- C 计算员工工资
- hdu 1251 统计难题(字典树)
- Hibernate与JDBC、EJB、JDO的比较
- PHP 生成 MySql 数据库字典
热门文章
- hd acm1005
- hd acm2025
- poj 1419Graph Coloring 【dfs+补图+计算最大团+计算最大独立集 【模板】】
- Memory Layout (Virtual address space of a C process)
- R 语言实现求导
- Codeforces 455B A Lot of Games:博弈dp【多局游戏】
- TinkPHP 简单知识摘要
- Hibernate学习---第十二节:Hibernate之锁机制&;乐观锁实现
- 一致性问题和Raft一致性算法——一致性问题是无法彻底解决的,可以说一个分布式系统可靠性达到99.99…%,但不能说它达到了100%
- 201621123014《Java程序设计》第四周学习总结