为避免与Servlet API耦合在一起,方便Action类做单元测试.
Struts2对HttpServletRequest、HttpSession、ServletContext进行了封装,构造了三个Map对象来替代这三种对象。
注意,这三个对象与Servlet API中的三个对象是相同的。
即,在Action中放入Session中信息,在JSP页面中是可以读出来的。
方式一:通过使用ActionContext类获取
在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

运行截图如下:


方式二:通过实现特定接口来获取

通过让Action实现特定接口,也可获取request/session/application对象。
 RequestAware接口:该接口中只有一个方法
    public void setRequest(Map<String,Object> request)
 SessionAware接口:该接口中只有一个方法
    public void setSession (Map<String,Object> session)
 ApplicationAware接口:该接口中只有一个方法
    public void setApplication (Map<String,Object> application)
只要在Action中以如下的形式定义好相应的对象:
            Map<String,Object> request;
并以如下的方式实现特定接口中的方法:
            this.request = request;
那么,在Action方法中(如execute方法)就可使用相应的对象了。
对这些对象的访问:
在各范围中放入属性后,在页面中即可通过EL表达式将其值读出来了。
    ${requestScope.req}   <br/>
    ${sessionScope.ses}   <br/>
    ${applicationScope.app}
实例:在Action中获取request/session/application—scopetest
Step1:编写ScopeTestAction与ScopeTestAction2类,来实现使用两种方式的添加相应习属性的功能
Step2:编写web.xml与struts.xml
Step3:编写show.jsp
在上面的基础上新建ScopeTestAction2.java
完成源码如下:
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对象的更多相关文章

  1. struts2 action中获取request session application的方法

    共四种方式: 其中前两种得到的是Map<String,Object>  后两种得到的才是真正的request对象 而Map就是把request对象中的属性取出做成了键值对而已. [方法一] ...

  2. struts2在action中获取request、session、application,并传递数据

    假设仅仅是通过request.session.application传递数据,则不须要获取对应的对象也能够传递数据,代码例如以下: ScopeAction.java: package com.ithe ...

  3. Struts2 在Action中获取request、session、servletContext的三种方法

    首页message.jsp: <body> ${requestScope.req }<br/> ${applicationScope.app }<br/> ${se ...

  4. Struts2的Action中获取request对象的几种方式?

    通过ActionContext.getSession获取 通过ServletActionContext.getRequest()获取 通过SessionAware接口注入 通过ServletReque ...

  5. SpringMvc4中获取request、response对象的方法

    springMVC4中获取request和response对象有以下两种简单易用的方法: 1.在control层获取 在control层中获取HttpServletRequest和HttpServle ...

  6. springMVC中获取request和response对象的几种方式(RequestContextHolder)

    springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...

  7. 在Struts2的Action中获得request response session几种方法

    转载自~ 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象呢?Struts2为我们提供了四种方式.分别为se ...

  8. struts2的action中获得request response session 对象

    在struts2中有两种方式可以得到这些对象 1.非IoC方式 要获得上述对象,关键Struts 2中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态 ...

  9. 在springMVC的controller中获取request,response对象的一个方法

    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttr ...

随机推荐

  1. canvas生成图片并保存到本地文件夹主要代码

    js var url = canvas.toDataURL();//把canvas中的图片变成data:image C# string filepath = ""; string ...

  2. ubuntu 安装与开始学习

    下载地址 http://cn.ubuntu.com/download/ 经验: 1.遇到安装问题,首先尝试解读错误,再使用  ./configure --help  不行再上Stack overflo ...

  3. SQL语句 多表基本操作

    创建四张表学生表:学号(Sno).姓名(Sname).性别(Ssex).年龄(Sage)教师表:教师编号(Tno).教师姓名(Tname)课程表:课程编号(Cno).课程名(Cname).教师编号(T ...

  4. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  5. PHP基础知识之foreach

    定义: foreach (array_expression as $value)------------循环时传递key foreach (array_expression as $key => ...

  6. 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  7. 代码自定义双色title的按钮

    所图所示,通过代码自定义这样的按钮. .h文件 // // CustomButtom.h // testPlus // // Created by 鹰眼 on 14/10/20. // Copyrig ...

  8. [转]runtime 消息机制

    原文地址:http://www.jianshu.com/p/f6300eb3ec3d 一.关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtim ...

  9. .NET Core中合并Expression<Func<T,bool>>的正确姿势

    这是在昨天的 .NET Core 迁移中遇到的问题,之前在 .NET Framework 中是这样合并 Expression<Func<T,bool>> 的: public s ...

  10. 基于多线程的TCP服务器项目【开源】

    本文提供一个完整的TCP Server实例,包括动态连接库.单元测试.验收测试.Winform模拟测试.供新手学习,还望老手多提意见. 项目地址:https://tcpserversocket.cod ...