<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法

    本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

    上一篇:Struts2教程5:使用Validation框架驗(yàn)證數(shù)據(jù)


        在struts1.x Action類的execute方法中,有四個(gè)參數(shù),其中兩個(gè)就是responserequest。而在Struts2中,并沒有任何參數(shù),因此,就不能簡單地從execute方法獲得HttpServletResponseHttpServletRequest對(duì)象了。

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

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

     

        這種方法需要Action類實(shí)現(xiàn)相應(yīng)的攔截器接口。如我們要獲得HttpServletResponse對(duì)象,需要實(shí)現(xiàn)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對(duì)象
        public void setServletResponse(HttpServletResponse response)
        {
            
    this.response = response;
        }    
        
    public String execute() throws Exception
        {    
            response.getWriter().write(
    "實(shí)現(xiàn)ServletResponseAware接口");
        }
    }

    在上面的代碼中,MyAction實(shí)現(xiàn)了一個(gè)ServletResponseAware接口,并且實(shí)現(xiàn)了setServletResponse方法。如果一個(gè)動(dòng)作類實(shí)現(xiàn)了ServletResponseAware接口,Struts2在調(diào)用execute方法之前,就會(huì)先調(diào)用setServletResponse方法,并將response參數(shù)傳入這個(gè)方法。如果想獲得HttpServletRequestHttpSessionCookie等對(duì)象,動(dòng)作類可以分別實(shí)現(xiàn)ServletRequestAwareSessionAwareCookiesAware等接口。這些接口都在org.apache.struts2.interceptor包中。

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

    boolean acceptableParameterName(String parameterName);

    【方法2】使用RequestAware攔截器

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


    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值。實(shí)際上只有一個(gè)key:struts.valueStack
            for(String key: keys)
                System.out.println(key);
            
    // 獲得OgnlValueStack 對(duì)象
            OgnlValueStack stack = (OgnlValueStack)request.get("struts.valueStack");
            
    // 獲得HttpServletResponse對(duì)象
            response = (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);
            response.getWriter().write(
    "實(shí)現(xiàn)RequestAware 接口");
        }
    }

        我們也可以使用StrutsStatics.HTTP_REQUESTStrutsStatics.PAGE_CONTEXT來獲得HttpServletRequestPageContext對(duì)象。這種方法有些麻煩,一般很少用,讀者可以作為一個(gè)參考。

    【方法3】使用ActionContext

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

        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及其他對(duì)象。這就是org.apache.struts2.ServletActionContext類。我們可以直接使用ServletActionContext類的getRequestgetResponse方法來獲得HttpServletRequestHttpServletResponse對(duì)象。代碼如下:

        HttpServletResponse response = ServletActionContext.getResponse()

        response.getWriter().write("hello world");

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


    下一篇:Struts2教程7:上傳任意多個(gè)文件




    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2008-04-22 18:06 銀河使者 閱讀(37244) 評(píng)論(16)  編輯  收藏 所屬分類: Struts2 原創(chuàng)

    評(píng)論

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    好像真比struts1.0麻煩
    2008-04-23 17:40 | 懶人

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    那要看如何用了。一般情況下,在action類中不需要使用request和response。而只是做一跳轉(zhuǎn)的動(dòng)作。這樣一來。就顯得struts1.x的execute的四個(gè)參數(shù)有些多余。因?yàn)榇蠖鄶?shù)時(shí)候用不著。
    2008-04-23 18:58 | 銀河使者

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    現(xiàn)在市場(chǎng)上主流的java開發(fā)技術(shù)是什么?struts1.0還是2.0,雖然2.0剛起步,但是我總覺得還是1.0用起來比較穩(wěn)定。
    2008-04-24 10:28 | 懶人

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    to: 懶人
    沒實(shí)際開發(fā)過就別亂說struts2不好,好不.麻煩是因?yàn)榍忻媲械? 這樣解耦解的多好.

    現(xiàn)在我們自己的項(xiàng)目里面struts和struts2一起用,除了獲取request和response麻煩些之外起碼都要比1要好用的多,尤其標(biāo)簽.

    ps:struts2里不要的地方有2處.
    1:2.09以上的版本標(biāo)簽和資源文件不支持EL表達(dá)式了.
    2:struts的標(biāo)簽有地方支持ognl表達(dá)式有的地方就不支持,就抵換成EL表達(dá)式了.
    2008-04-24 14:38 | 皮蛋

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    我就是感覺標(biāo)簽太多記不太住,可能我沒經(jīng)常用習(xí)慣吧。用習(xí)慣了自然就好了
    2008-04-24 15:36 | 懶人

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法[未登錄]  回復(fù)  更多評(píng)論   

    用多了就好了,其實(shí)2比1在配置一些東西時(shí)簡單一些。
    標(biāo)簽就不說了,2比1好太多了,而其就一個(gè),不像1有3個(gè)
    2008-04-24 16:19 | jarry

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    實(shí)際上,struts1或struts2的標(biāo)簽根本不用記,只要知道大概有什么樣的標(biāo)簽就可以了,有很多IDE(如MyEclipse)都會(huì)將這些了標(biāo)簽自動(dòng)列出來的,包括它們的屬性。你要知道的就是這些屬性和標(biāo)簽都起什么作用就可以了,至于它們的名子,基本上不用記,頂多知道前幾個(gè)字母就可以了。

    哈哈,我想沒人用記事本來編寫java程序吧(練習(xí)除外)。
    2008-04-24 20:21 | 銀河使者

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    現(xiàn)在不考研的沒有那么較真的吧呵呵
    2008-04-25 10:45 | 懶人

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法[未登錄]  回復(fù)  更多評(píng)論   

    引用:http://www.cnblogs.com/Bruce_H21/archive/2008/05/22/1204649.html
    2008-05-22 11:35 | neo0820

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    方法三里的HttpServletResponse response(HttpServletResponse) =

    ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
    好像寫錯(cuò)了吧,我無法通過驗(yàn)證呢
    會(huì)不會(huì)是HttpServletResponse response =(HttpServletResponse)

    ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
    還是另有玄機(jī)?
    2008-07-12 17:38 | 上善

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    @上善
    是的,一個(gè)筆誤,已經(jīng)改過來了,多謝提醒。如果還有什么地方寫的有錯(cuò)誤,歡迎大家指正。
    2008-07-13 14:04 | 銀河使者

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法[未登錄]  回復(fù)  更多評(píng)論   

    樓主寫的很好,支持一下:)

    另外有個(gè)小小的筆誤:
    // 獲得OgnlValueStack 對(duì)象
    OgnlValueStack stack = (OgnlValueStack)myRequest.get("struts.valueStack");

    這里的myRequest 應(yīng)該是 request.
    2009-02-02 16:21 | Sam

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法  回復(fù)  更多評(píng)論   

    @Sam
    是的,感謝提醒,已經(jīng)改過來了。
    2009-02-02 16:54 | 銀河使者

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法[未登錄]  回復(fù)  更多評(píng)論   

    版主用心良苦,寫得比培訓(xùn)教材還要詳細(xì)、全面。版主的共享精神值得學(xué)習(xí)。
    2011-05-04 15:54 | ahome

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法[未登錄]  回復(fù)  更多評(píng)論   

    內(nèi)容很好,一看就懂!
    2013-04-30 12:08 | abc

    # re: Struts2教程6:在Action類中獲得HttpServletResponse對(duì)象的四種方法[未登錄]  回復(fù)  更多評(píng)論   

    great!
    2013-05-01 09:07 | abc
    主站蜘蛛池模板: 日木av无码专区亚洲av毛片| 亚洲精品在线观看视频| 天天看免费高清影视| 成人影片麻豆国产影片免费观看| 亚洲电影免费观看| 中文字幕在线免费| 两性刺激生活片免费视频| 国产精品久久久久免费a∨ | 无码乱人伦一区二区亚洲| 亚洲AV午夜成人片| 亚洲av日韩av激情亚洲| 亚洲欧洲视频在线观看| 亚洲自国产拍揄拍| 亚洲a无码综合a国产av中文| 美女免费视频一区二区| 一级一看免费完整版毛片| 久久高潮一级毛片免费| 免费一区二区三区| 欧洲一级毛片免费| 成年人性生活免费视频| 无码专区一va亚洲v专区在线| 亚洲精品无码AV中文字幕电影网站| 久久精品亚洲乱码伦伦中文| 亚洲精品乱码久久久久久久久久久久| 亚洲Av永久无码精品三区在线| 亚洲五月六月丁香激情| 亚洲一级片在线观看| 久久久久久久久无码精品亚洲日韩| 看免费毛片天天看| 国产午夜无码片免费| 亚洲免费闲人蜜桃| 日韩成全视频观看免费观看高清| 亚洲福利中文字幕在线网址| 亚洲精品国偷自产在线| 亚洲三级在线视频| 美女一级毛片免费观看| 99热这里只有精品免费播放| 免费看香港一级毛片| 国产亚洲色婷婷久久99精品91| 亚洲综合久久久久久中文字幕| 亚洲人成人无码.www石榴|