Struts2教程6:在Action類中獲得HttpServletResponse物件的四種方法
在struts1.x Action類的execute方法中,有四個引數,其中兩個就是response和request。而在Struts2中,並沒有任何引數,因此,就不能簡單地從execute方法獲得HttpServletResponse或HttpServletRequest物件了。
但在Struts2 Action類中仍然有很多方法可以獲得這些物件。下面就列出四種獲得這些物件的方法。
【方法1】使用Struts2 Aware攔截器
這種方法需要Action類實現相應的攔截器介面。如我們要獲得HttpServletResponse物件,需要實現org.apache.struts2.interceptor.ServletResponseAware介面,程式碼如下:
package action;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import org.apache.struts2.interceptor.*;
public class MyAction extends ActionSupport implements ServletResponseAware
{
private javax.servlet.http.HttpServletResponse response;
// 獲得HttpServletResponse物件
public void setServletResponse(HttpServletResponse response)
{
this.response = response;
}
public String execute() throws Exception
{
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及其他的一些資訊。程式碼如下所示:
package action;
import java.util.Map;
import org.apache.struts2.*;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import com.opensymphony.xwork2.util.*;
import org.apache.struts2.interceptor.*;
public class FirstAction extends ActionSupport implements RequestAware
{
private Map request;
private HttpServletResponse response;
public void setRequest(Map request)
{
this.request = request;
}
public String execute() throws Exception
{
java.util.Set keys = request.keySet();
// 列舉所有的key值。實際上只有一個key:struts.valueStack
for(String key: keys)
System.out.println(key);
// 獲得OgnlValueStack 物件
OgnlValueStack stack = (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");
從這四種方法來看,最後一種是最簡單的,讀者可以根據自己的需要和要求來選擇使用哪一種方法來獲得這些物件。
但在Struts2 Action類中仍然有很多方法可以獲得這些物件。下面就列出四種獲得這些物件的方法。
【方法1】使用Struts2 Aware攔截器
這種方法需要Action類實現相應的攔截器介面。如我們要獲得HttpServletResponse物件,需要實現org.apache.struts2.interceptor.ServletResponseAware介面,程式碼如下:
package action;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import org.apache.struts2.interceptor.*;
public class MyAction extends ActionSupport implements ServletResponseAware
{
private javax.servlet.http.HttpServletResponse response;
// 獲得HttpServletResponse物件
public void setServletResponse(HttpServletResponse response)
{
this.response = response;
}
public String execute() throws Exception
{
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及其他的一些資訊。程式碼如下所示:
package action;
import java.util.Map;
import org.apache.struts2.*;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import com.opensymphony.xwork2.util.*;
import org.apache.struts2.interceptor.*;
public class FirstAction extends ActionSupport implements RequestAware
{
private Map request;
private HttpServletResponse response;
public void setRequest(Map request)
{
this.request = request;
}
public String execute() throws Exception
{
java.util.Set
// 列舉所有的key值。實際上只有一個key:struts.valueStack
for(String key: keys)
System.out.println(key);
// 獲得OgnlValueStack 物件
OgnlValueStack stack = (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");
從這四種方法來看,最後一種是最簡單的,讀者可以根據自己的需要和要求來選擇使用哪一種方法來獲得這些物件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-247791/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- struts之Action中獲取request、response物件的方法物件
- Spring中獲得dataSurce物件的方法Spring物件
- 四種在Javascript比較物件的方法JavaScript物件
- 007--在Struts2的Action中訪問Servlet API三種形式ServletAPI
- 在struts + hibernate設計中如何將action獲得的物件集合在網頁上表示出來物件網頁
- Struts2筆記05 action操作域物件筆記物件
- Spring6 當中 獲取 Bean 的四種方式SpringBean
- 在SpringMVC中獲取request物件的幾種方式SpringMVC物件
- 在spring中獲取代理物件代理的目標物件工具類Spring物件
- STRUTS2獲得session和requestSession
- 獲取 Class 物件的 3 種方法物件
- Javascript獲取原型的四種方法JavaScript原型
- 獲得ip地理資訊的幾種方法【最全】
- aspectJ中怎樣獲得呼叫 pointcut 的物件物件
- 在 Ruby 中執行 Shell 命令的 6 種方法
- 在MFC類中各種類的指標的獲取和應用指標
- Struts2教程之二Action建立方式
- Struts2教程之三Action訪問方式
- Struts2中使用Session的兩種方法Session
- 獲取表單物件的三種方法物件
- 簡單理解Struts2 action中動態方法及萬用字元字元
- Java反射機制demo(五)—獲得並呼叫一個類中的方法Java反射
- 如何獲得Session物件及在Hibernate.cfg.xml檔案中的配置Session物件XML
- 獲得類的屬性
- struts2 action中result引數詳解
- struts2的異常There is no Action mapped for namespace / and action nameAPPnamespace
- ES6中物件新增的方法物件
- 獲取執行計劃的6種方法
- 重貼:MFC類中獲得其它類指標 (轉)指標
- Struts2 中jsp直接跳轉到actionJS
- Java中獲取Class物件的三種方式Java物件
- 軟體國產化 四類廠商獲得新機遇
- 在本地執行 LLMs 的 6 種方法
- 分享幾種清理“其他儲存”並在Mac上獲得更多可用空間的方法Mac
- 在關卡藍圖中獲得actor的資訊
- 反射獲取注入到spring中的類物件的工具類反射Spring物件
- VB6 獲取CPUID的幾種方法UI
- 【LanceZhang】ASP.NET獲取IP的6種方法ASP.NET