博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可用来获取HttpServletResponse响应的数据的包装器类
阅读量:7016 次
发布时间:2019-06-28

本文共 2449 字,大约阅读时间需要 8 分钟。

/** *  * MyResponseWrapper * 自定义HttpServletResponse包装器类,在过滤器中使用,可用于获取response响应的数据; * 使用方法:在过滤器中的doFilter方法中,创建这个类的对象,包装原始的response, * 然后将包装类对象作为参数传递给FilterChain的doFilter方法,并在这个doFiler方法执行完毕后, * 调用包装器对象的getBytes方法即可获取servlet响应的数据; * @author pf * @datetime 2016年4月28日 下午4:15:03 */public class MyResponseWrapper extends HttpServletResponseWrapper {    private ByteArrayOutputStream bytes = new ByteArrayOutputStream();    private PrintWriter pwrite;    public MyResponseWrapper(HttpServletResponse response) {        super(response);    }    @Override    public ServletOutputStream getOutputStream() throws IOException {        return new MyServletOutputStream();    }    @Override    public PrintWriter getWriter() throws IOException {        try{            pwrite = new PrintWriter(new OutputStreamWriter(bytes, "utf-8"));        } catch(UnsupportedEncodingException e) {            e.printStackTrace();        }        return pwrite;    }    /**     *      * 获取响应数据     * @param      * @return byte[]     * @throws     * @author pf     * @datetime 2016年4月28日 下午4:23:33     */    public byte[] getBytes() {        if(null != pwrite) {            pwrite.close();            return bytes.toByteArray();        }        if(null != bytes) {            try {                bytes.flush();            } catch(IOException e) {                e.printStackTrace();            }        }        return bytes.toByteArray();    }    private class MyServletOutputStream extends ServletOutputStream {        @Override        public void write(int b) throws IOException {            bytes.write(b); // 将数据写到 stream 中        }        @Override        public boolean isReady() {            return false;        }        @Override        public void setWriteListener(WriteListener writeListener) {        }    }}

 在Filter中使用演示:

@Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        //将参数response的类型强制转换为使用Http协议的HttpServletResponse类型        HttpServletResponse httpResp = (HttpServletResponse) response;        //创建包装器对象,包装原始的response对象        MyResponseWrapper respWrapper = new MyResponseWrapper(httpResp);        //继续执行过滤器链的doFilter方法,使用上面的包装器对象做参数        chain.doFilter(request, respWrapper);        //过滤器方法执行完毕,通过包装器对象获取缓存在包装器中的响应的数据        byte[] bytes = respWrapper.getBytes();        //处理获取到的响应的数据    }

 

转载于:https://www.cnblogs.com/pf1988/p/10191313.html

你可能感兴趣的文章
[程序员应该知道的]硬盘基本知识(二)
查看>>
快速统计一个数二进制中1的个数
查看>>
IDEA配置spring
查看>>
知识点总结报告 1.25
查看>>
关于autofac的一些具体的用法
查看>>
Mysql 知识(3)
查看>>
稳定方块
查看>>
Git学习的简单笔记
查看>>
9月5日队内互测总结
查看>>
测试的窘境
查看>>
[原创]隐藏用户名出现在Windows XP欢迎画面
查看>>
[SDOI2010]星际竞速——费用流
查看>>
C#开发串口总结,并提炼串口辅助类到公用类库中
查看>>
【个人笔记】《知了堂》MySQL中的数据类型
查看>>
Java “Unhandled exception type Exception”错误提示 (转)
查看>>
PHP源码之explode分析
查看>>
怪叔叔 一路走好 下辈子我们再一起玩KOF
查看>>
B.华华教月月做数学
查看>>
python 如何自动发送测试报告
查看>>
网络流24题4
查看>>