什么是WEB资源?

这里所说的WEB资源是指:HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API。

为什么需要访问WEB资源?

B/S 的应用的 Controller 中必然需要访问 WEB 资源: 向域对象中读写属性, 读写 Cookie等等操作均需要用到上述原生的ServletAPI

访问方法

和 Servlet API 解耦的方式:

只能访问有限的 Servlet API 对象, 且只能访问其有限的方法(读取请求参数, 读写域对象的属性, 使 session 失效...).

> 使用 ActionContext

使用示例:

public class ActionTest {

	@SuppressWarnings("unchecked")
	public String execute() {
		// 0、获取ActionContext对象
		// ActionContext是Action的上下文,可以从中获取到当前Action需要的相关信息
		ActionContext context = ActionContext.getContext();

		// 1、获取application域对应的Map对象
		// 通过调用上下文对象context的getApplication()方法获取
		Map<String, Object> applicationMap = context.getApplication();
		applicationMap.put("applicationKey", "applicationValue");

		// 2、session
		Map<String, Object> sessionMap = context.getSession();
		sessionMap.put("sessionKey", "sessionValue");

		// 3、request
		// ActionContext中并没有提供获取getRequest方法来获取requestMap的方法
		// 而是需要调用get方法,并且传入‘request’字符串作为参数来获取
		Map<String, Object> requestMap = (Map<String, Object>) context.get("request");
		requestMap.put("requestKey", "requestValue");

		// 4、获取请求参数对应的map
		// 键:请求参数名,值:请求参数的值对应的字符串数组
		Map<String, Object> parameters = context.getParameters();
		System.out.println(((String[]) parameters.get("name"))[0]);
		return null;
	}

}  

> 实现 XxxAware 接口

使用示例:

public class ActionAwareTest implements ApplicationAware, SessionAware, RequestAware, ParameterAware {

	private Map<String, Object> applicationMap;

	private Map<String, Object> sessionMap;

	private Map<String, Object> requestMap;

	private Map<String, String[]> parameters;

	@Override
	public void setApplication(Map<String, Object> map) {
		this.applicationMap = map;
	}

	@Override
	public void setSession(Map<String, Object> map) {
		this.sessionMap = map;
	}

	@Override
	public void setRequest(Map<String, Object> map) {
		this.requestMap = map;

	}

	@Override
	public void setParameters(Map<String, String[]> map) {
		this.parameters = map;

	}

	public String execute() {
		return null;

	}

}

> 选用的建议:

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

    

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

和 Servlet API 耦合的方式:

可以访问更多的 Servlet API 对象, 且可以调用其原生的方法.

> 使用 ServletActionContext

获取方法:

/**
 * ServletActionContext 可以从中获取到一切Servlet API相关的方法
 * @author Administrator
 *
 */
public class ServletActionContextTest {

	public String execute(){
		//获取原生request对象
		HttpServletRequest request=ServletActionContext.getRequest();
		//获取原生session对象
		HttpSession session=request.getSession();
		//获取原生application对象
		ServletContext  application=ServletActionContext.getServletContext();

		return null;
	}
}

> 实现 ServletXxxAware 接口.

获取方法:

/**
 * 通过实现ServletXxxAware接口的方式由Struts2负责注入相关对象
 * ServletRequestAware:用来注入request对象
 * ServletContextAware:用来注入application对象
 * @author Administrator
 *
 */
public class ServletAwareActionTest implements ServletRequestAware, ServletContextAware {

	private HttpServletRequest request;

	private ServletContext application;

	private HttpSession session;

	@Override
	public void setServletContext(ServletContext servletContext) {
		this.application = servletContext;

	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
		this.session = request.getSession();
	}

}

Struts2在Action中访问WEB资源的更多相关文章

  1. 在Action 中访问web资源

    1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Contr ...

  2. 2.struts2访问web资源(在struts2中获取session,request等等)

    什么是web资源:web资源就是指request,response,session,servlet的api 为什么需要访问web资源:因为图片上传,需要获取图片的目录,就需要通过action来访问we ...

  3. Struts2(四):在Action中如何访问Web资源

    1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生Servle ...

  4. [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. 在struts2的action中操作域对象(request、session)

    在struts2的Action中,操作域对象一共有三种方式: 1.ActionContext(与servelt API无关联): //相当于request ActionContext.getConte ...

  6. 在Firefox中通过AJAX跨域访问Web资源---

    一.解决在firefox中无法跨域访问的问题 AJAX从本质上讲就是命名用XMLHttpRequest组件来向服务端发送HTTP请求,请接收相应信息.至于成功接收到响应信息后的操作,就和普通的Web客 ...

  7. 9.Struts2在Action中获取request-session-application对象

    为避免与Servlet API耦合在一起,方便Action类做单元测试. Struts2对HttpServletRequest.HttpSession.ServletContext进行了封装,构造了三 ...

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

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

  9. struts2对action中的方法进行输入校验---xml配置方式(3)

    上面两篇文章已经介绍了通过编码java代码的方式实现action方法校验,这里我们介绍第二种方式:xml配置文件 首先我们来看一个样例: ValidateAction.java: package co ...

随机推荐

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. IE8/9 本地预览上传图片

    本地预览的意思是,在选择图片之后先不上传到服务器,而是由一个<img>标签来预览本地的图片,非 IE8/9 浏览器可以从<input type="file"/&g ...

  3. py2exe

    1- 生成单一的exe文件: pyinstaller.py -F d:\open_txt\t.py 2- 添加必要的搜索路径: pyinstaller.py -F -p D:\python27\Lib ...

  4. Hbase+ Phoenix搭建教程

    Hbase+ Phoenix搭建教程 一.Hbase简介 HBase是基于列存储.构建在HDFS上的分布式存储系统,其主要功能是存储海量结构化数据. HBase构建在HDFS之上,因此HBase也是通 ...

  5. SpringMVC 温故而知新

    http://www.cnblogs.com/bigdataZJ/p/5815467.html直接引用别人的吧,没时间呀

  6. 【Linux】类Unix 操作系统进程监控控制工具 Supervisor

    Supervisor 是一个客户端服务器系统,允许用户监控和控制类 Unix 操作系统上的进程数. 官网 http://supervisord.org 安装1. easy_install superv ...

  7. null、undefined、false、0相等性比较

    之前在看<JavaScript权威指南>的时候看到三个相等性比较的式子: null == undefined ;// ==>true undefined == false;// == ...

  8. 邮件中继成畅邮标配 U-Mail为何领先

    中国力推“一带一路”战略,为首成立“亚投行”,越来越多的中国企业酝酿走出去.在企业间的商务往来中,电子邮件将扮演着重要角色,但是因为要跨洋 过海,各国互联网环境和法律法规有所区别,面临着种种变数,对方 ...

  9. Python数据类型之“文本序列(Text Sequence)”

    Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不可变序列.字符串字面量有多种形式: 单引号:'允许嵌入"双&q ...

  10. 百度mobile UI组件GMU demo学习1-结构和初始化

    移动web现在已经是zepto的天下,但是一直找不到合适UI库,找了一段时间,终于找到了百度的ui库gum和inter 的 appframework UI库 相比之下,百度的UI库更接地气,配合百度强 ...