Struts2学习第四课 通过Aware接口获取WEB资源
使用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失效。
Struts2学习第四课 通过Aware接口获取WEB资源的更多相关文章
- Struts2 - 通过实现 Aware 接口访问 Web 资源
Action 类通过可以实现某些特定的接口, 让 Struts2 框架在运行时向 Action 实例注入 parameters, request, session 和 application 对应的 ...
- Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- Struts2学习第七课 result
result 是action节点的子节点 result 代表action方法执行后,可能去的一个目的地 一个action节点可以配置多个result子节点. result的name属性值对应着acti ...
- Struts2学习第六课 实现登录登出功能
关于Struts2请求的扩展名问题: 1).org.apache.struts2包下的default.properties中配置了struts2应用的一些常量 2).struts.action.ext ...
- Struts2学习第三课 访问Web资源
1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Contr ...
- IGS_学习笔记06_IREP发布客户化集成接口为Web Service(案例)
2015-01-03 Created By BaoXinjian
- struts2基础——请求与响应、获取web资源
一.请求与响应 Action1.含义:(1) struts.xml 中的 action 元素,也指 from 表单的 action 属性,总之代表一个 struts2 请求.(2) 用于处理 Stru ...
- Struts2学习笔记四:深入拦截器
一:拦截器的工作原理 拦截器的执行过程可以类比filter过滤器,ActionInvocation实例执行过程中,先执行action实例上引用的拦截器们,然后才执行action实例处理请求,返回res ...
- Struts2学习第五课 通过和ServletAPI耦合的方式获取WEB资源
与Servlet耦合的访问方式 直接访问Servlet API将使Action与环境Servlet环境耦合在一起,测试时需要有Servlet容器,不便对Action的单元测试. 直接获取HttpSer ...
随机推荐
- jquery获取表单元素与回显
一.获取哦表单元素 dcoument表单文本对象的集合 all[] 对所有html元素的访问 forms 返回对文档中所有form对象的引用 forms[1] 对所有form对象引用 <scri ...
- nginx配置大全
nginx配置大全
- Spring Cloud之Feign客户端调用工具
feign介绍 Feign客户端是一个web声明式http远程调用工具,提供了接口和注解方式进行调用. Spring Cloud 支持 RestTemplate Fetin Feign客户端实际开发 ...
- SQLServer 一些有用的语句
SET STATISTICS TIME ON 记录查询的相关数据 生成随机Guid SELECT NewID() 按照某一列排序并生成序号 select Row_Number() OVER (ORDE ...
- 分享知识-快乐自己:Shrio 案例Demo概述
Shiro 权限认证核心: POM:文件: <!--shiro-all--> <dependency> <groupId>org.apache.shiro</ ...
- linux应用之ntpdate命令联网同步时间
当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间. 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210 ...
- 从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主
总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制.过采样后模型选择RF.xgboost.神经网络能够取得非常不错的效果.(2)模型层面:使用模型 ...
- LSM Tree 学习笔记——MemTable通常用 SkipList 来实现
最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...
- Redis-benchmark使用总结
Redis-benchmark为Redis性能测试工具. 指令说明: Usage: redis-benchmark [-h <host>] [-p <port>] [-c &l ...
- freeMarker(十一)——模板语言之指令
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.assign 概要 <#assign name1=value ...