因爲我年輕,所以對於Java EE規範我其實很新。我從來沒有在學校學過這些東西,我正面臨着一種奇怪的行爲,用doFilter
方法。doFilter方法可能存在的誤解
考慮以下過濾器:
@WebFilter(filterName = "URLFilter", value = "/test")
public class URLFilter implements Filter {
public void destroy() {}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletResponse response = (HttpServletResponse) resp;
if (response.getStatus() == HttpServletResponse.SC_NOT_FOUND)
response.sendRedirect("/");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {}
}
沒有servlet或存在於/test
,在我的瀏覽器頁面,狀態顯然是在訪問URL時,所以應該是價值退還給我一個404 not found
錯誤由getStatus()
方法不是。 (實際上有一個200
狀態碼)
爲什麼我的過濾器沒有按要求將我重定向到/
?我是否誤解了一般情況下使用Filters
?
UPDATE:
我的問題是有關重定向客戶端(使用sendRedirect()
),當找不到一個頁面。我不明白過濾器部分,因爲我不知道當chain.doFilter()
被調用時,resp
和req
實際上被新數據填充。 (因爲它的doFilter我居然發現了奇怪的是調用由COR模式鏈的下一個過濾器)
我做了一個類繼承HttpServletResponseWrapper
,實現了它,它傳遞給過濾器,它現在工作的罰款。
所以這裏唯一的目的或過濾器是修改請求/迴應之前,實際資源服務? – MadJlzz
不可以。您可以在調用chain.doFilter()之後執行*。 –
是的,然後我的迴應得到承諾,我不能做像'sendRedirect()'的東西。我想我別無選擇,只能做一個包裝來管理我想要的東西。 – MadJlzz