是否可以编写一个servlet过滤器来检查HTTP响应代码?是否可以编写一个servlet过滤器来检查HTTP响应代码?
我想写一个过滤器,将非破坏性地检查传出的HTTP响应代码。但是,在Response对象上似乎没有类似getResponseCode()
的方法。
我也不清楚servlet中未处理的异常应该如何处理。我真的不希望这个过滤器实际设置任何东西。被动很好。
想法?
(我的另一种方法涉及到编写自定义的Tomcat阀,但事实并非如此便携。)
是否可以编写一个servlet过滤器来检查HTTP响应代码?是否可以编写一个servlet过滤器来检查HTTP响应代码?
我想写一个过滤器,将非破坏性地检查传出的HTTP响应代码。但是,在Response对象上似乎没有类似getResponseCode()
的方法。
我也不清楚servlet中未处理的异常应该如何处理。我真的不希望这个过滤器实际设置任何东西。被动很好。
想法?
(我的另一种方法涉及到编写自定义的Tomcat阀,但事实并非如此便携。)
您可以使用HttpServletResponseWrapper包装你的输出响应:
class GetStatusWrapper extends HttpServletResponseWrapper {
private int status;
GetStatusWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void setStatus(int sc) {
super.setStatus(sc);
status = sc;
}
public int getStatus() {
return status;
}
}
在你的过滤器
则:
public class GetStatusResponseFilter implements Filter {
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain filterChain)
throws IOException, ServletException {
GetStatusWrapper wrapper;
wrapper = new GetStatusWrapper((HttpServletResponse) response);
filterChain.doFilter(request, wrapper);
System.out.println("status = " + wrapper.getStatus());
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {
}
}
好吧,我遇到了三个问题:ONE)还有其他方法来设置状态,但我已经把它们放下了(我希望。)TWO )如果状态不明确(正如我的测试中发生的那样),这是否意味着我可以安全地假设它是200 OK?三)如果例如super.sendRedirect()抛出一个错误会发生什么?我开始发现这种方法过于冗长,并且没有信心我会在100%的时间内获得权威。 – 2009-06-29 12:07:01
你会考虑写周围的原始响应类的代理包装?这样你可以处理对象上的事件/方法调用。
是的,我对细节很模糊。在这种情况下如何处理未处理的异常?我的代理包装会传回堆栈,它可能会更改状态码吗? (我真的不知道这是否可能。) – 2009-06-29 10:07:27
它怎么说,我问的问题第一,但_“这个问题以前有人问并且已经有了答案。“另一个问题是两个月后。它不是重复的吗? – 2015-06-01 16:07:21