一、什么是 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。