9.Struts2在Action中获取request-session-application对象
为避免与Servlet API耦合在一起,方便Action类做单元测试.Struts2对HttpServletRequest、HttpSession、ServletContext进行了封装,构造了三个Map对象来替代这三种对象。
注意,这三个对象与Servlet API中的三个对象是相同的。即,在Action中放入Session中信息,在JSP页面中是可以读出来的。
在Struts2框架中,通过Action的执行上下文类ActionContext,可以获取request/session/application对象。
ActionContext对象本身就是request范围的存储空间。
所以,对于向request范围中添加属性,直接向ActionContext对象中添加即可。
ActionContext ctx = ActionContext.getContext();
Map<String,Object> application = ctx.getApplication();
Map<String,Object> session = ctx.getSession();application.put(“app”, “应用范围”);
//往ServletContext里放入app session.put(“ses”, “session范围”);
//往session里放入ses ctx.put(“req”, “request范围”);
//往request里放入req
代码文档目录如下:

index.jsp源码如下:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
This is my JSP page. <br>
</body>
</html>
show.jsp源码如下:
<%@ page pageEncoding="utf-8" isELIgnored="false"%> <html>
<head>
<title>show page</title>
</head> <body> application中的app=${applicationScope.app}<br/>
session中的ses=${sessionScope.ses}<br/>
request中的req=${requestScope.req} </body>
</html>
ScopeTestAction.java源码如下:
package actions;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
public class ScopeTestAction {
public String execute(){
ActionContext ctx=ActionContext.getContext();
Map<String,Object> application=ctx.getApplication();
Map<String,Object> session=ctx.getSession();
application.put("app","app scope");
session.put("ses","ses scope");
//request中放入属性req
ctx.put("req", "req scope");
return "success";
}
}
web.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="one" extends="struts-default"> <action name="scope" class="actions.ScopeTestAction">
<result>/show.jsp</result>
</action> </package> </struts>
部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/request_session_application/scope.action
运行截图如下:

方式二:通过实现特定接口来获取
RequestAware接口:该接口中只有一个方法public void setRequest(Map<String,Object> request)SessionAware接口:该接口中只有一个方法public void setSession (Map<String,Object> session)ApplicationAware接口:该接口中只有一个方法public void setApplication (Map<String,Object> application)
${requestScope.req} <br/>${sessionScope.ses} <br/>${applicationScope.app}




package actions; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; public class ScopeTestAction2 implements RequestAware, SessionAware,ApplicationAware {
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application; public void setRequest(Map<String, Object> request) {
this.request = request;
} public void setSession(Map<String, Object> session) {
this.session = session;
} public void setApplication(Map<String, Object> application) {
this.application = application;
} public String execute(){ application.put("app","app scope");
session.put("ses","ses scope"); //request中放入属性req
request.put("req", "req scope");
return "success";
} }
修改后struts.xml文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="one" extends="struts-default"> <action name="scope" class="actions.ScopeTestAction">
<result>/show.jsp</result>
</action>
<action name="scope2" class="actions.ScopeTestAction2">
<result>/show.jsp</result>
</action> </package> </struts>
重新部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/request_session_application/scope2.action

9.Struts2在Action中获取request-session-application对象的更多相关文章
- struts2 action中获取request session application的方法
共四种方式: 其中前两种得到的是Map<String,Object> 后两种得到的才是真正的request对象 而Map就是把request对象中的属性取出做成了键值对而已. [方法一] ...
- struts2在action中获取request、session、application,并传递数据
假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...
- Struts2 在Action中获取request、session、servletContext的三种方法
首页message.jsp: <body> ${requestScope.req }<br/> ${applicationScope.app }<br/> ${se ...
- Struts2的Action中获取request对象的几种方式?
通过ActionContext.getSession获取 通过ServletActionContext.getRequest()获取 通过SessionAware接口注入 通过ServletReque ...
- SpringMvc4中获取request、response对象的方法
springMVC4中获取request和response对象有以下两种简单易用的方法: 1.在control层获取 在control层中获取HttpServletRequest和HttpServle ...
- springMVC中获取request和response对象的几种方式(RequestContextHolder)
springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...
- 在Struts2的Action中获得request response session几种方法
转载自~ 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为se ...
- struts2的action中获得request response session 对象
在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态 ...
- 在springMVC的controller中获取request,response对象的一个方法
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttr ...
随机推荐
- Java概念性问题
一.变量命名的五个要素 由字母.数字.“_”和“$” 组成 首字母不能为数字 大小写敏感 不能使用Java的保留字和关键字 可以使用中文命名,但是不建议 二.java的基本数据类型 整数类型:byte ...
- ABP理论学习之开篇介绍
返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...
- Azure 新的管理模式 —— Resource Manager
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- IEEE754、VAX、IBM浮点型介绍和.NET中互相转换
[题外话] 最近在做C3D文件的解析,好奇怪的是文件中竟然存储了CPU的类型,原本不以为然,结果后来读取一个文件发现浮点数全部读取错误.查了下发现虽然在上世纪80年代就提出了IEEE754要统一浮点数 ...
- android服务里生成通知点击后返回正在运行的程序和当前的Activity
想在服务里生成一个通知,并且点击通知打开当前应用程序下单当前活动,折腾了半天,网上的那些都不靠谱,试了半天,最后把ActivityManager和反射都用进来了,终于解决了这个问题.这样在服务中想恢复 ...
- Node.js Base64 Encoding和Decoding
如何在Node.js中encode一个字符串呢?是否也像在PHP中使用base64_encode()一样简单? 在Node.js中有许多encoding字符串的方法,而不用像在JavaScript中那 ...
- SharedPreferences.Editor 的apply()与commit()方法的区别
commit()的文档 官方文档如下: Commit your preferences changes back from this Editor to the SharedPreferences o ...
- sublime text 下的Markdown写作
sublime text 2(3)下的Markdown写作 什么是 Markdown wiki Markdown 是一种方便记忆.书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富 ...
- 今天不谈技术,说说一些常用的软件~By 逆天
前端工具:http://www.cnblogs.com/dunitian/p/5640147.html 在线办公: http://word.baidu.com/welcome.html http ...
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...