1. 程式人生 > >Struts2中Action訪問Servlet API的三種方法

Struts2中Action訪問Servlet API的三種方法

Struts2的Action並未直接與任何Servlet API耦合,這是Struts2的一個改良之處,因為Action類不再與Servlet API耦合,從而能更輕鬆的測試該Action。
但對於Web應用的控制器而言,不訪問Servlet API幾乎是不可能的,例如跟蹤HTTP Session狀態等。Struts2框架提供了一種更輕鬆的方式來訪問Servlet API。Web應用中通常需要訪問的Servlet API就是HttpServletRequest,HttpSession和ServletContext,這三個類分別代表JSP內建物件中的request,session和appliaction。通過Action訪問Servlet API有以下三種方法:

Struts2提供了一個ActionContext類,Struts2的Action可以通過該類來訪問Servlet API。下面是ActionContext類中包含的幾個常用方法:

   Object get(Object key):該方法類似於呼叫HttpServletRequest的getAttribute(String name)方法。
   Map getApplication():返回一個Map物件,該物件模擬了該應用的ServletContext例項。
   static ActionContext getContext():靜態方法,獲取系統的ActionContext例項。
   Map getParameters():獲取所有的請求引數。類似於呼叫HttpServletRequest物件的getParameterMap方法。
   Map getSession():返回一個Map物件,該Map物件模擬了HttpSession例項。
   void setApplication(Map application):直接傳入一個Map例項,將該Map例項裡的key-value對轉換成application的屬性名、屬性值。
   void setSession(Map session):直接傳入一個Map例項,將該Map例項裡的key-value對轉換成session的屬性名、屬性值。

雖然Struts2提供了ActionContext來訪問ServletAPI,但是並不能直接獲得ServletAPI的例項。但是Struts2提供了以下介面,
   ServletContextAware:實現該介面的Action可以直接訪問ServletContext例項。
   ServletRequestAware:實現該介面的Action可以直接訪問HttpServletRequest例項。
   ServletResponseAware
:實現該介面的Action可以直接訪問HttpServletResponse例項。

除此之外,為了能直接訪問Servlet API,Struts2還提供了一個ServletActionContext,其靜態方法有:

getPageContext(),getRequest(),getResponse(),getServletContext()

上面三種方法的區別,方法一取得的例項是經過Struts2包裝過後的,而後兩種方法取得的例項是原生態的。但都有異曲同工之妙。