Struts2學習筆記(3)-如何訪問Web資源

一、web資源是什麼?

   web資源是HttpServletRequest、HttpSession、ServletContext等原生的Servlet API。

二、爲什麼要訪問web資源?

    B/S的應用的controller中必然需要訪問web資源,比如:向域對象中讀寫屬性、讀寫Cookie、獲取realPath等...

三、怎麼訪問web資源?

  訪問web資源有兩種方式:
  1. 和Servlet API解耦的方式:

        只能訪問到有限的servlet API對象,而且只能訪問到有限的方法(讀取請求參數、訪問域對象的屬性、使session失效等...)
    

    (1)實現ActionContext

      爲了避免與servlet API耦合在一起,方便Action做單元測試。
    
      ActionContext是Action執行的上下文對象。
      在ActionContext中保存了Action執行所需要的所有對象。
      包括parameters、request、session、application等。
    
     獲取HttpServletRequest對應的Map對象:
    
       public Object get(Object key):ActionContext類中沒有提供類似getRequest()這樣的方法來獲取HttpServletRequest對應的Map對象。要得到HttpServletRequest對應的Map對象,可以通過爲get()方法傳遞“request”參數實現。
      獲取HttpSession對應的Map對象:    public Map getSession();
      獲取ServletContext對應的Map對象: public Map getApplication();
      獲取請求參數對應的Map對象:         public Map getParameters();
  (2)實現XxxAware接口
    Struts2提供了4種分別來訪問ActionContext、Request、Response和Session對象的接口,
  根據具體需要選擇就可以了。4個接口如下:
        org.apache.struts2.interceptor.ApplicationAware
        org.apache.struts2.interceptor.SessionAware
        org.apache.struts2.interceptor.RequestAware
        org.apache.struts2.interceptor.ParameterAware
  選用建議:若一個Action類中有多個action方法,且多個方法都需要使用域對象的Map或parameters,
則建議使用Aware接口的方式。因爲只要定義成員變量就可以了(不用在每個方法裏獲取)。      
  1. 和Servlet API耦合的方式:

       可以訪問更多的servlet API對象,且可以調用其原生的方法。
    
      在動作類裏,可以通過ServletActionContext對象或通過實現Aware接口去訪問Web資源。
      實現Aware接口是依賴注入技術的一種實現,這也是推薦的方法,因爲它將使你的動作類更容易測試。
    

    (1)實現ServletActionContext

ServletActionContext包括ActionContext,並且比ActionContext更容易使用。有以下方法:
public static javax.servlet.http.HttpServletRequest getRequest(),返回當前HttpServletRequest對象;
public static javax.servlet.http.HttpServletResponse getResponse(),返回當前HttpServletResponse對象;
public static javax.servlet.ServletContext getServletContext(),返回ServletContext對象;
   可以通過在HttpServletRequest對象上調用一個getSession方法的辦法來獲得HttpSession對象。如果使用了basicStack或defaultStack攔截器棧,HttpSession對象將被自動創建。
    注意:不應該從動作類的構造器裏調用ServletActionContext類的方法.
    因爲在這個階段,底層的ActionContext對象還沒有被傳遞給它。
    從某個動作的構造器裏調用ServletActionContext.getServletContext方法將返回空值;

(2)實現ServletXxxAware接口

      Struts2提供了4種分別來訪問ServletContext、HttpServletRequest、HttpServletResponse和HttpSession對象的接口,根據具體選擇即可。
      4個接口如下:

           org.apache.struts2.util.ServletContextAware;
           org.apache.struts2.interceptor.ServletRequestAware;
           org.apache.struts2.interceptor.ServletReponseAware;
           org.apache.struts2.interceptor.SessionAware;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章