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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Action类中获得HttpServletResponse对象的四种方法

發(fā)布時間:2024/1/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Action类中获得HttpServletResponse对象的四种方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Struts2:在Action類中獲得HttpServletResponse對象的四種方法

?

?

??? 在struts1.x Action類的execute方法中,有四個參數(shù),其中兩個就是response和request。而在Struts2中,并沒有任何參數(shù),因此,就不能簡單地從execute方法獲得HttpServletResponse或HttpServletRequest對象了。

??? 但在Struts2 Action類中仍然有很多方法可以獲得這些對象。下面就列出四種獲得這些對象的方法。

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

?

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

Java代碼 ?
  • 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("實現(xiàn)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("實現(xiàn)ServletResponseAware接口");} }

    ?

    ?

    ?

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

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

    boolean acceptableParameterName(String parameterName);

    【方法2】使用RequestAware攔截器

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

    ?

    Java代碼 ?
  • 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("實現(xiàn)RequestAware?接口"); ??
  • ????} ??
  • }??
  • 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.valueStackfor(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("實現(xiàn)RequestAware 接口");} }

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

    ?

    【方法3】使用ActionContext類

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


    ???

    Java代碼 ?
  • HttpServletResponse?response?=?(HttpServletResponse) ??
  • ??
  • ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); ??
  • ??
  • HttpServletRequest?request?=?(HttpServletRequest) ??
  • ??
  • ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);??
  • 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對象。代碼如下:

    Java代碼 ?
  • HttpServletResponse?response?=?ServletActionContext.getResponse() ??
  • ??
  • response.getWriter().write("hello?world");??
  • HttpServletResponse response = ServletActionContext.getResponse()response.getWriter().write("hello world");

    ?

    ?

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

    http://lzwdq.iteye.com/blog/550675

    轉(zhuǎn)載于:https://www.cnblogs.com/hpuCode/archive/2012/08/18/2645219.html

    總結(jié)

    以上是生活随笔為你收集整理的在Action类中获得HttpServletResponse对象的四种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。