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

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

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

    posts - 22, comments - 17, trackbacks - 0, articles - 15
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
     

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

        但在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參數傳入這個方法。如果想獲得HttpServletRequestHttpSessionCookie等對象,動作類可以分別實現ServletRequestAwareSessionAwareCookiesAware等接口。這些接口都在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對象,這個對象可以獲得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值。實際上只有一個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_REQUESTStrutsStatics.PAGE_CONTEXT來獲得HttpServletRequestPageContext對象。這種方法有些麻煩,一般很少用,讀者可以作為一個參考。

    【方法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類的getRequestgetResponse方法來獲得HttpServletRequestHttpServletResponse對象。代碼如下:

        HttpServletResponse response = ServletActionContext.getResponse()

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

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


    評論

    # re: Struts2 在Action類中獲得HttpServletResponse對象的四種方法  回復  更多評論   

    2008-05-15 14:42 by yxc
    正在研究這方面的東西,謝謝!

    # re: Struts2 在Action類中獲得HttpServletResponse對象的四種方法[未登錄]  回復  更多評論   

    2008-09-15 21:03 by BOBO
    非常好,謝謝樓主咯!

    # re: Struts2 在Action類中獲得HttpServletResponse對象的四種方法  回復  更多評論   

    2009-02-04 11:20 by ldd
    剛接觸不久,謝啦。
    主站蜘蛛池模板: 99久久99久久精品免费看蜜桃| 久久精品免费电影| 特级淫片国产免费高清视频| 色婷婷亚洲十月十月色天| 四虎影视在线影院在线观看免费视频 | 亚洲国产精品一区二区成人片国内| 黄色三级三级三级免费看| 日本大片在线看黄a∨免费| 亚洲国产成人无码AV在线影院| 在线免费观看一级毛片| 亚洲精品无码成人片久久不卡| 成全影视免费观看大全二| 亚洲精品乱码久久久久久蜜桃图片| 成人在线免费观看| 久久亚洲欧美国产精品| 亚洲国产成人久久精品99 | 亚洲人成亚洲精品| 亚洲免费黄色网址| 亚洲人成欧美中文字幕| 日本高清免费中文字幕不卡| 免费看黄网站在线看| 国产精品久久久亚洲| 亚洲一级毛片免费在线观看| 99亚偷拍自图区亚洲| 亚洲AV成人精品日韩一区18p| 成人精品视频99在线观看免费| 久久99国产亚洲精品观看| 丁香花在线观看免费观看| 老子影院午夜伦不卡亚洲| 久久亚洲国产成人精品无码区| 久久美女网站免费| 亚洲综合成人婷婷五月网址| 亚洲人成电影网站国产精品 | 三年片在线观看免费观看大全动漫| 亚洲国产亚洲综合在线尤物| 国产精品免费看香蕉| 免费观看男人吊女人视频| 亚洲午夜无码久久久久软件| 亚洲视频在线免费| 在线观看特色大片免费视频| av午夜福利一片免费看久久|