但在Struts2 Action類中仍然有很多方法可以獲得這些對象。下面就列出四種獲得這些對象的方法。
方法1使用Struts2 Aware攔截器
這種方法需要Action類實現相應的攔截器接口。如我們要獲得HttpServletResponse對象,需要實現org.apache.struts2.interceptor.ServletResponseAware接口,代碼如下:
packageaction;
importcom.opensymphony.xwork2.ActionSupport;
importjavax.servlet..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..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");
從這四種方法來看,最後壹種是最簡單的,讀者可以根據自己的需要和要求來選擇使用哪壹種方法來獲得這些對象。