Struts2:在 Action 中访问 WEB 资源

一、什么是 WEB 资源?数组

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

二、为何访问 WEB 资源?app

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

三、如何访问?spa

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

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

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

 

具体分析:字符串

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

0、获取 ActionContext 对象

  //ActionContext 是 Action 的上下文对象。能够从中获取到当前 Action 须要的一切信息。

  ActionContext actionContext = ActionContext.getContext();

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

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

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

  //设置属性

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

  //获取属性

  applicationMap.get("date");

二、session (能够进行属性的读写操做)

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

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

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

三、request * (能够进行属性的读写操做)

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

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

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

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

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

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

   二、parameters 这个 Map 只能读,不能写入数据,若是写入,但不出错,但也不起做用。

 

2、实现 XxxAware 接口

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

implements ApplicationAware, ParameterAware, RequestAware, SessionAware

 

由于解耦的方式只能获取 Map,有的时候咱们须要用到原生的 API。因此须要耦合的方式。

1、使用 ServletActionContext 的方式:能够从中获取到当前 Action 对象须要的一切 Servlet API 相关的对象。

经常使用的方法:

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

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

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

 

2、实现 ServletXxxAware 接口的方式

implements ServletRequestAware,  ServletContextAware, ServletResponseAware

 

over。

相关文章
相关标签/搜索