Struts2:在 Action 中访问 WEB 资源

1、什么是 WEB 资源?

HttpServletRequest、HttpSession、ServletContext 等原生的 Servlet API。

2、为什么访问 WEB 资源?

B/S 的应用的 Controller 中必然需要访问 WEB 资源(向域对象中读写属性、读写Cookie、获取 realPath 等)

3、如何访问?

1)、和Servlet API 解耦的方式:只能访问有限的 Servlet API 对象,且只能访问有限的方法。(使用 ActionContext 、实现 XxxAware 接口)。

2)、和  Servlet 耦合的方式:可以访问更多的 Servlet API 对象,可以调用其原生的方法。(使用 ServletActionContext、实现 ServletXxxAware 接口)。

两者区别:若一个 Action 类中有多个 action 方法,且多个方法都需要使用域对象的Map 或 parameters ,则建议使用实现 XxxAware 接口的方式。

具体分析:

一、使用 ActionContext 对象来获取 WEB 资源:

0、获取 ActionContext 对象

  //ActionContext 是 Action 的上下文对象。可以从中获取到当前 Action 需要的一切信息。

  ActionContext actionContext = ActionContext.getContext();

1、获取 appliction 对应的 Map,并向其中添加一个属性

  //通过调用 ActionContext 对象的 getApplication() 方法来获取 application 对象的 Map 对象。

  Map<String, Object> applicationMap = actionContext.getApplication();

  //设置属性

  applicationMap.put("applicationKey","applicationValue");

  //获取属性

  applicationMap.get("date");

2、session (可以进行属性的读写操作)

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

  Map<String, Object> sessionMap = actionContext.getSession();

  sessionMap.put("sessionKey", "sessionValue");

3、request * (可以进行属性的读写操作)

  ActionContext 中并没有提供 getRequest 方法来获取 request 对应的 Map,需要手工调用 get() 方法,传入 request 字符串来获取。

  Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");

  requestMap.put("requestKey", "requestValue");

4、获取请求参数对应的 Map,并获取指定的参数值。

键:请求参数的名字。值:请求参数的值对应的字符串数组。

注意:1、getParameters 的返回值为在 Map<String, Object>,而不是Map<String, String[]>.

   2、parameters 这个 Map 只能读,不能写入数据,如果写入,但不出错,但也不起作用。

二、实现 XxxAware 接口

Action 类通过可以实现某些特定的接口,让 Struts2 框架在运行时向 Action 实例注入 parameters、request、session 和 application 对应的 Map 对象。

implements ApplicationAware, ParameterAware, RequestAware, SessionAware

因为解耦的方式只能获取 Map,有的时候我们需要用到原生的 API。所以需要耦合的方式。

一、使用 ServletActionContext 的方式:可以从中获取到当前 Action 对象需要的一切 Servlet API 相关的对象。

常用的方法:

1、获取 HttpServletRequest:ServletActionContext.getRequest();

2、获取 HttpSession: ServletActionContext.getRequest().getSession();

3、获取 ServletContext:ServletActionContext.getServletContext();

二、实现 ServletXxxAware 接口的方式

implements ServletRequestAware,  ServletContextAware, ServletResponseAware

over。

时间: 2024-12-21 02:21:12

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

在Action 中访问web资源

1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Controller 中必然需要访问web资源:如域对象中读写属性,读取Cookie,获取realPath... 3.如何访问? 1.和Servlet API 解耦的方式:只能访问有限的Servlet API 对象,且只能访问有限的方法(读取请求的参数,读写域对象的属性,使Session对象失效等等) -->

Struts2的Action中访问servletAPI方式

struts2的数据存放中心为ActionContext,其是每次请求来时都会创建一个ActionContext,访问结束销毁,其绑定在ThreadLocal上,由于每次访问web容器都会为每次请求创建一个独立的线程ThreadLocal,而ActionContext绑定在ThreadLocal上,所以各个ActionContext是相互独立和安全的,在ActionContext中还持有其他的域对象引用,如application,session等,ActionContext销毁时只销毁自己内部创

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

1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生ServletAPI. 2.在Struts2中为什么要访问WEB资源? B/S应用中的Controller必然会有场景需要访问WEB资源:向域对象中读写属性,读取Cookie,获取realPath等. 3.在Struts2中如何访问WEB资源? a)和ServletAPI解耦的方式:只能有限的ServletAP

Struts2学习第三课 访问Web资源

1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等. 3.如何访问? 在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet AP

Struts2中访问web元素的四种方式

Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.SessionAware.ApplicationAware接口来访问Map类型的request.session.application对象(IoC方式). 通过ServletActionContext来访问Servlet API类型的HttpServletRequest. HttpSession. Serv

JSP中的内置对象和Struts中的Web资源的详解

JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法:只能在Servlet中获取的doGet()和doPost()方法中获取 作用:封装用户请求信息 response   : 继承于HttpServletResponse,   HttpServletResponse继承ServletResponse 获得response对象的方法:只能在Servlet

尚硅谷公开课--struts2--3--struts2中获取web资源的几种方式

在struts2中,可以在JavaBean类中写公用的返回值为String类型的方法来响应页面上的请求,也可以在此方法中获取web资源,如:request,application,session,parameters等. 一.通过ActionContext获取 步骤: 1.获取ActionContext对象 通过ActionContext.getContext()获取一个ActionContext的实例 2.获取web资源对应胡Map 此Map类型为Map<String,Object>.获取方

6、访问web资源

1.什么是web资源? HttpServletRequest.HttpSession.ServletContext等原生servlet API 2.为什么访问web资源? B\S 的应用中Controller中必然要访问web资源:向域对象中读写属性,读写cookie.读写realPath..... 3.如何访问? ①和Servlet API解耦的方式:只能访问有限的servlet API 对象,且只能访问其有限的对象方法(读取请求参数.读取域对象的属性.使session失效) >使用Actio

Struts2 的Action中取得请求参数值的几种方法

Struts2 的Action中取得请求参数值的几种方法 先看GetRequestParameterAction类代码: Java代码 public class GetRequestParameterAction extends ActionSupport { private String bookName; private String bookPrice; public String getBookName() { return bookName; } public void setBook