獲取HttpServletResponse對象

【方法1】使用Struts2 Aware攔截器

  這種方法需要Action類實現相應的攔截器接口。如我們要獲得HttpServletResponse對象,需要實現org.apache.struts2.interceptor.ServletResponseAware接口,代碼如下:

  packageaction;

importcom.opensymphony.xwork2.ActionSupport;
importjavax.servlet.http.*;
importorg.apache.struts2.interceptor.*;
publicclassMyActionextendsActionSupportimplementsServletResponseAware
{
  privatejavax.servlet.http.HttpServletResponseresponse;
  //獲得HttpServletResponse對象
  publicvoidsetServletResponse(HttpServletResponseresponse)
  {
    this.response=response;
  }  
  publicStringexecute()throwsException
  {  
    response.getWriter().write("實現ServletResponseAware接口");
  }
}

  在上面的代碼中,MyAction實現了一個ServletResponseAware接口,並且實現了setServletResponse方法。如果一個動作類實現了ServletResponseAware接口,Struts2在調用execute方法之前,就會先調用setServletResponse方法,並將response參數傳入這個方法。如果想獲得HttpServletRequest、HttpSession和Cookie等對象,動作類可以分別實現ServletRequestAware、SessionAware和CookiesAware等接口。這些接口都在org.apache.struts2.interceptor包中。

 如果要獲得請求參數,動作類可以實現org.apache.struts2.interceptor. ParameterAware接口,但如果只想判斷某個參數是否存在,也可以實現com.opensymphony.xwork2.interceptor. ParameterNameAware接口。這個接口有一個acceptableParameterName方法,當Struts2獲得一個請求參數時,就會調用一次。讀者可以在這個方法中將所有的請求參數記錄下來,以便以後使用。這個方法的定義如下:

boolean acceptableParameterName(String parameterName);

  【方法2】使用RequestAware攔截器

  這種方法和第1種方法類似。動作類需要實現一個org.apache.struts2.interceptor.RequestAware接口。所不同的是RequestAware將獲得一個com.opensymphony.xwork2.util.OgnlValueStack對象,這個對象可以獲得response、request及其他的一些信息。代碼如下所示:

  packageaction;

importjava.util.Map;
importorg.apache.struts2.*;
importcom.opensymphony.xwork2.ActionSupport;
importjavax.servlet.http.*;
importcom.opensymphony.xwork2.util.*;
importorg.apache.struts2.interceptor.*;
publicclassFirstActionextendsActionSupportimplementsRequestAware
{
  privateMaprequest;
privateHttpServletResponseresponse;
  publicvoidsetRequest(Maprequest)
  {
    this.request=request;    
  }  
  publicStringexecute()throwsException
  {  
    java.util.Set<String>keys=request.keySet();
    //枚舉所有的key值。實際上只有一個key:struts.valueStack
    for(Stringkey:keys)
      System.out.println(key);
    //獲得OgnlValueStack對象
    OgnlValueStackstack=(OgnlValueStack)myRequest.get("struts.valueStack");
    //獲得HttpServletResponse對象
    response= (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);
    response.getWriter().write("實現RequestAware接口");
  }
}

 

 我們也可以使用StrutsStatics.HTTP_REQUEST、StrutsStatics.PAGE_CONTEXT來獲得HttpServletRequest和PageContext對象。這種方法有些麻煩,一般很少用,讀者可以作爲一個參考。<!-- 分頁 -->

  【方法3】使用ActionContext類

  這種方法比較簡單,我們可以通過org.apache.struts2.ActionContext類的get方法獲得相應的對象。代碼如下:

  HttpServletResponse response = (HttpServletResponse)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
HttpServletRequest request = (HttpServletRequest)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);

  【方法4】使用ServletActionContext類

  Struts2爲我們提供了一種最簡單的方法獲得HttpServletResponse及其他對象。這就是org.apache.struts2.ServletActionContext類。我們可以直接使用ServletActionContext類的getRequest、getResponse方法來獲得HttpServletRequest、HttpServletResponse對象。代碼如下:

  HttpServletResponse response = ServletActionContext.getResponse()
  response.getWriter().write("hello world");

  從這四種方法來看,最後一種是最簡單的,讀者可以根據自己的需要和要求來選擇使用哪一種方法來獲得這些對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章