是否可以編寫一個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