比如我有一个请求
http://www.xxxx.com/2.jsp
那么,我怎么写一个servlet,对所有的.jsp的返回数据拦截,进行处理后,再返回

解决方案 »

  1.   

    应该是写filter吧
    具体写法请google,配置文件贴下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app>
    <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>com.easyjf.web.CharsetFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
    <init-param>
    <param-name>ignore</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter> <filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <servlet-name>*.jsp</servlet-name>
    </filter-mapping>
    </web-app>
      

  2.   

    我要获得response的内容,就是在返回到IE前,我想先拦截比如,本来是返回
    今天是***   
    我想拦截,然后把***替换成对应的,然后再返回
      

  3.   

    和下面的类似:比如,我网站上有N张图片,我现在需要在它显示在IE前,拦截,然后加上水印,
      

  4.   

    写一个Filter,在doFilter中调用
    chain.doFilter(request, new MyHttpServletResponseWrapper(response));这个MyHttpServletResponseWrapper extends HttpServletResponseWrapper
    并覆盖getWriter方法,返回一个你自己的Writer,这样就可以方便的过滤了。
      

  5.   

    这个MyHttpServletResponseWrapper extends HttpServletResponseWrapper
    并覆盖getWriter方法,返回一个你自己的Writer,这样就可以方便的过滤了。
    怎么样得到返回的数据
      

  6.   

    恐怕是要你自己构造一个PrintWriter,此Writer写入所需要的内容返回
      

  7.   

    看看这个文章,我想对你有帮助
    http://www.1-100.org/JSP/12975.htm String html = responseWrapper.toString();得到页面结果字符串,恐怕是要用正则解析此字符串替换成所需要的
      

  8.   

    不一样的,它是去读一个文本文件,然后通过response返回,我现在是动态的数据流,
    文本的再笨也可以写,根据请求,去读,然后处理,返回
      

  9.   

    你是不太可能获得你据说的已经返回的,因为这段非常可能已经返回到客户端了。所以你还是只能 像 killme2008(为了生态平衡,请保护蛤蟆) 说的你自己构造一个PrintWriter,此Writer写入所需要的内容返回
      

  10.   

    首先定义WrappedResponse:package example.chapter7;import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServletResponseWrapper;public class Wrapper extends HttpServletResponseWrapper {    public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;    private int outputType = OT_NONE;    private ServletOutputStream output = null;
        private PrintWriter writer = null;
        private ByteArrayOutputStream buffer = null;    public Wrapper(HttpServletResponse resp) throws IOException {
            super(resp);
            buffer = new ByteArrayOutputStream();
        }    public PrintWriter getWriter() throws IOException {
            if(outputType==OT_STREAM)
                throw new IllegalStateException();
            else if(outputType==OT_WRITER)
                return writer;
            else {
                outputType = OT_WRITER;
                writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
                return writer;
            }
        }    public ServletOutputStream getOutputStream() throws IOException {
            if(outputType==OT_WRITER)
                throw new IllegalStateException();
            else if(outputType==OT_STREAM)
                return output;
            else {
                outputType = OT_STREAM;
                output = new WrappedOutputStream(buffer);
                return output;
            }
        }    public void flushBuffer() throws IOException {
            if(outputType==OT_WRITER)
                writer.flush();
            if(outputType==OT_STREAM)
                output.flush();
        }    public void reset() {
            outputType = OT_NONE;
            buffer.reset();
        }    public byte[] getResponseData() throws IOException {
            flushBuffer();
            return buffer.toByteArray();
        }    class WrappedOutputStream extends ServletOutputStream {        private ByteArrayOutputStream buffer;        public WrappedOutputStream(ByteArrayOutputStream buffer) {
                this.buffer = buffer;
            }        public void write(int b) throws IOException {
                buffer.write(b);
            }        public byte[] toByteArray() {
                return buffer.toByteArray();
            }
        }}然后编写Filter,这里给的例子是用GZip压缩Response:package example.chapter7;import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.zip.GZIPOutputStream;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;public class GZipFilter implements Filter {    public void init(FilterConfig filterConfig) throws ServletException {}
        public void destroy() {}    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            HttpServletResponse resp = (HttpServletResponse)response;
            Wrapper wrapper = new Wrapper(resp);
            chain.doFilter(request, wrapper);
            byte[] gzipData = gzip(wrapper.getResponseData());
            resp.addHeader("Content-Encoding", "gzip");
            resp.setContentLength(gzipData.length);
            ServletOutputStream output = response.getOutputStream();
            output.write(gzipData);
            output.flush();
        }    private byte[] gzip(byte[] data) {
            ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
            GZIPOutputStream output = null;
            try {
                output = new GZIPOutputStream(byteOutput);
                output.write(data);
            }
            catch (IOException e) {}
            finally {
                if(output!=null) {
                    try {
                        output.close();
                    }
                    catch (IOException e) {}
                }
            }
            return byteOutput.toByteArray();
        }
    }