日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2 - 在Action类中获得HttpServletResponse对象

發布時間:2025/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2 - 在Action类中获得HttpServletResponse对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Struts2 - 在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< String> keys = request.keySet();?????????

// 枚舉所有的key值。實際上只有一個key:struts.valueStack
????????? for(String key: keys)
????????????? System.out.println(key);
????????? // 獲得OgnlValueStack 對象
????????? OgnlValueStack stack = (OgnlValueStack)request.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类中获得HttpServletResponse对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。