使用Filter获取响应报文

本文介绍了如何利用Filter来获取响应报文。针对普通HTTP请求,通过重写HttpServletResponseWrapper的getWriter()方法返回自定义的MyPrintWriter,该类继承自PrintWriter并保存写入的字符。对于webservice请求,重写getOutputStream()返回MyOutputStream,该类覆写ServletOutputStream的write(int b)方法,存储写入的字节。作者认为这种方式可能并非最佳实践,期待更好的解决方案。
摘要由CSDN通过智能技术生成

实现原理

普通http请求

  • MyServletResponseWrapper重写HttpServletResponseWrapper的getWriter()返回MyPrintWriter
  • MyPrintWriter重写PrintWriter的所有write 方法。
  • MyPrintWriter定义一个容器接收write方法写入的字符

webservice请求

  • MyServletResponseWrapper重写HttpServletResponseWrapper的getOutputStream()返回MyOutputStream
  • MyOutputStream重写ServletOutputStream的write(int b)方法
  • MyOutputStream定义一个容器接收write方法写入的字节

实现代码

@WebFilter(filterName="myFilter ",urlPatterns="/*")
public class MyFilter implements Filter {
   
@Override 
	public void destroy() {
   
		
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
   
		HttpServletRequest req = (HttpServletRequest)arg0;
		HttpServletResponse resp = (HttpServletResponse)arg1;
		MyServletResponseWrapper myresp = new MyServletResponseWrapper(resp);
		arg2.doFilter(arg0, arg1);
		System.out.println(myresp.getContent());
	}
	
	@Override
	public void init(FilterConfig arg0) throws ServletException {
   
	}
}

public class MyServletResponseWrapper extends HttpServletResponseWrapper implements ResponseContent{
   
	private MyPrintWriter myPrintWriter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值