Struts 2 Action訪問Servlet API

jopen 8年前發布 | 14K 次閱讀 Struts2 Web框架

            Action訪問Servlet API   

           Struts2中的Action并沒有和任何Servlet API耦合,這樣框架更具靈活性,更易測試。

           對于Web應用的控制器而言,不訪問ServletAPI是幾乎不可能的。Web應用中通常需要訪問的ServletAPI就是HttpServletRequest、HttpSession和ServletContext,這三個接口分別代表JSP中內置對象中的request、session、application。

          Struts 2提供了一個ActionContext類,Struts 2的action可以通過該類來訪問Servlet API

         ActionContext類提供了一個靜態方法getContext(),該方法返回一個ActionContext的實例。該實例提供了一些訪問Servlet API的方法。     

方法名

功能描述

getContext()

靜態方法,獲取系統的ActionContext實例

getSession()

返回一個Map對象,該對象存入HttpSession實例。

setSession(Map session)

直接傳入一個Map實例,將該map實例總得key、value對應轉換成session的屬性名、屬性值

getApplication()

返回一個Map對象,該對象存入ServletContext實例

setApplication()

直接傳入一個Map實例,將實例中的key、value對應轉換成application的屬性名、屬性值

getParameters()

獲得所有請求參數。類似于調用HttpServletRequest對象的getParameterMap方法

          ActionContext將在Action類中通過ActionContext訪問Servlet API,該Action中示范了向request、session、application范圍設置屬性值。         

ActionContext ctx = ActionContext.getContext(); 

    //獲得Session 
    Map session = ctx.getSession(); 

    //獲得Application 
    Map application = ctx.getApplication();

          struts 2即可以徹底與Servlet API 分離,從而可以允許該脫離Web容器運行,也就可以脫離Web容器來測試Action;又允許用簡單的方式來操作request、session、application范圍的屬性。

 

       Action 直接訪問Servlet API

      雖然Struts 2 提供了ActionContext來訪問Servlet API,但這種訪問畢竟不是直接獲得Servlet API的實例。Struts 2 提供了幾種接口,Action可以直接訪問Servlet API

 

實現接口名稱

接口描述

ServletContextAware

實現該接口的Action可以直接訪問Web應用的ServletContext實例

ServletRequestAware

實現該接口的Action可以直接訪問用戶請求的HttpServletRequest實例

ServletResponseAware

實現該接口的Action可以直接訪問服務器響應的HttpServletResponse


        private HttpServletResponse response;
    //重寫實現ServletResponseAware接口
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;

    }

          通過上面可知,實現ServletResponseAware接口,只需要實現如下方法:

         public void setServletResponse(HttpServletResponse response);

         類似的,如果一個Action實現了ServletRequestAware,則需要實現如下方法:

         public void setServletRequest(HttpServletRequest request);

         類似的,如果一個Action實現了ServletContextAware,則需要實現如下方法:

         public void setServletContext(ServletContext  context);

         即使我們在struts 2 的Action類中獲得了httpServletRespose對象,也不要嘗試直接在Action中對客戶端生成響應。

        

         使用ServletActionContext訪問Servlet API

         為了能夠直接訪問Servlet API,struts 2 還提供了一個ServletAction工具類,這個類包含了如下幾個靜態方法

返回值

方法名

功能描述

HttpServletRequest

getRequest()

獲得Web應用的HttpServletRequest對象

HttpServletResponse

getResponse()

獲得Web應用的HttpservletResponse對象

ServletContext

getServletContext()

獲得Web應用的ServletContext對象

PageContext

getServletContext()

獲得Web應用的ServletContext對象

 

      借助于ServletActionContext工具類的幫助,Action能以更加簡單的方式來訪問Servlet API。

      

      讀李剛《輕量級java EE企業應用實戰(第三版)—struts 2+Spring 3+Hibernate整合開發》

 

 

 

 

 

 

 

 

 

來自: http://blog.csdn.net/chenssy/article/details/7272780

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!