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