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

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

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

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計

    留言簿(23)

    積分與排名

    優(yōu)秀學習網(wǎng)站

    友情連接

    閱讀排行榜

    評論排行榜

    利用過濾器修改響應(轉)

     如果想用過濾器捕獲servlet對客戶端的響應輸出并且對它進行修改,就必須在響應被發(fā)送回客戶端之前,在服務器端緩存這個響應。Servlet API為我們提供了:
        HttpServletResponseWrapper類
    利用它我們可以截獲響應并在本地緩存,然后想做什么就做什么。
    下面是一個可重用的響應包裝器:

    /*
    * CharResponseWrapper
    *@author Karl Moss
    */

    package com.omh.filters;

    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;

    /**
    * Simple response wrapper that utilizes a local CharArrayWriter
    * for output
    */
    public class CharResponseWrapper
    extends HttpServletResponseWrapper
    {
    protected CharArrayWriter charWriter;//將響應緩存在這個寫入器中
    protected PrintWriter writer;
    protected boolean getOutputStreamCalled;
    protected boolean getWriterCalled;
    public CharResponseWrapper(HttpServletResponse response)
    {
    super(response);
    // Create the writer
    charWriter = new CharArrayWriter();
    }
    public ServletOutputStream getOutputStream()
    throws IOException
    {
    // Can't call getOutputStream if getWriter
    // has already been called
    if (getWriterCalled)
    {
    throw new IllegalStateException(
    "getWriter already called");
    }
    getOutputStreamCalled = true;
    return super.getOutputStream();
    }
    public PrintWriter getWriter()
    throws IOException
    {
    if (writer != null)
    {
    return writer;
    }
    // Can't call getWriter if getOutputStream
    // has already been called
    if (getOutputStreamCalled)
    {
    throw new IllegalStateException(
    "getOutputStream already called");
    }
    getWriterCalled = true;
    writer = new PrintWriter(charWriter);
    return writer;
    }
    public String toString()//將響應數(shù)據(jù)用字符串返回
    {
    String s = null;
    // Only return a String if the writer was
    // used.
    if (writer != null)
    {
    s = charWriter.toString();
    }
    return s;
    }
    
    public char[] toCharArray(){//將響應數(shù)據(jù)以字符數(shù)組返回 return(charWriter.toCharArray());
    } }

    利用上面包裝器把一個servlet響應全部改變成大寫形式:

     /*
    * UpperCaseFilter
    * @author  Karl Moss
    */
    package com.omh.filters;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    /**
    * Filter that uses a response wrapper to convert all
    * output to upper case
    */
    public class UpperCaseFilter
    implements Filter
    {
    protected FilterConfig config;
    public void init(FilterConfig config)
    throws ServletException
    {
    // Save the config object
    this.config = config;
    }
    public void destroy()
    {
    }
    public void doFilter(ServletRequest request,
    ServletResponse response,
    FilterChain chain)
    throws ServletException, IOException
    {
    ServletResponse newResponse = response;
    // If this is an HttpRequest, wrap the response
    // with our CharArrayWriter so that we can get
    // the contents
    if (request instanceof HttpServletRequest)
    {
    newResponse = new CharResponseWrapper(
    (HttpServletResponse) response);
    }
    // Invoke the next filter/servlet in the chain
    // using (perhaps) a wrapped response
    chain.doFilter(request, newResponse);
    if (newResponse instanceof CharResponseWrapper)
    {
    // Get the contents of the output. A String
    // is returned only if a Writer was used,
    // indicating text output. If getOutputStream
    // was used the output will go to the "real"
    // underlying output stream back to the client
    String text = newResponse.toString();
    if (text != null)
    {
    text = text.toUpperCase();
    // Now write the output to the real
    // output stream that goes back to
    // the client
    response.getWriter().write(text);
    }
    }
    }
    }
    

    過濾器配置:

    <filter>
    <filter-name>Upper Case Filter</filter-name>
    <filter-class>com.omh.filters.UpperCaseFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>Upper Case Filter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    運行圖:

    posted on 2007-10-11 13:04 都市淘沙者 閱讀(453) 評論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

    主站蜘蛛池模板: 成在人线AV无码免费| 久久国产精品免费视频| 亚洲毛片αv无线播放一区| 久久这里只精品热免费99| 亚洲国产精品无码第一区二区三区| 国产乱辈通伦影片在线播放亚洲 | 亚洲2022国产成人精品无码区 | 亚洲国产视频一区| 亚洲最大av无码网址| 免费女人高潮流视频在线观看| 亚洲精品乱码久久久久久按摩| 日本黄页网站免费| 波多野结衣中文字幕免费视频 | 亚洲伊人久久精品影院| 亚洲成A人片在线观看中文| 成年人网站在线免费观看| 国产免费一区二区三区| 无码国产精品一区二区免费vr | 16女性下面扒开无遮挡免费| 国产99视频精品免费视频76| 亚洲AV噜噜一区二区三区| 国产精品成人无码免费| 男女做羞羞的事视频免费观看无遮挡| 亚洲无码一区二区三区 | 18禁网站免费无遮挡无码中文| 国产精品色拉拉免费看| 毛片a级毛片免费播放100| 日韩国产免费一区二区三区| 野花高清在线观看免费完整版中文 | 日本道免费精品一区二区| 国内精品久久久久影院免费| 6080午夜一级毛片免费看6080夜福利| aⅴ在线免费观看| 国产亚洲视频在线观看| 日韩色视频一区二区三区亚洲| 日本亚洲中午字幕乱码| 国产免费阿v精品视频网址| 国产免费丝袜调教视频| 亚洲精品乱码久久久久久不卡| 亚洲线精品一区二区三区| 中文字幕亚洲精品资源网|