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。

相關文章
相關標籤/搜索