好的 - 最近我一直在使用Java過濾器進行一些工作,而且我們經常需要在Web應用程序之間移動時回收代碼;我們可以讓過濾器查看相對位置,以便可以在多個上下文中使用它們,但我們仍然會經歷很多過濾器。所以,我創建了一個超類來幫助代碼生成;我還在超類中添加了runFilter方法作爲抽象方法,以保持它與標準doFilter分離。超類的代碼如下所示:Java doFilter()將NPE作爲超類的一部分投入使用
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
try {
runFilter(req,resp,chain);
}
catch (Exception e) {
getLogger().error("Error! Exception:",e);
}
}
現在,這裏的問題:每當擴展上面的代碼過濾器觸發,我得到的錯誤,就像我在上面記錄器設置,但我也從內部獲得日誌信息子類的runFilter表明它正在做它的工作 - 轉發甚至按照它應該的方式工作。我看着我的控制檯,它顯示了子類正在訪問過濾器鏈的行上發生的錯誤。
if (isExcluded(debugURI)) {
chain.doFilter(request, response);
return;
} else if (request.getSession().getAttribute("USER") == null) {
getLogger().info("Session with ID " + serialVersionUID + " has timed out. Redirecting to " + getRedirectTarget() + ".");
response.sendRedirect(getRedirectTarget());
chain.doFilter(request, response);
return;
}
else {
chain.doFilter(request, response);
return;
}
是否需要更新(或擴展)FilterChain以便接收runFilter的調用?任何幫助將非常有用。
我很難理解具體的問題。請澄清。在代碼中唯一不正確的是'sendRedirect()'後面的'doFilter()'調用。這是不對的。擺脫那條線。但這似乎不符合對NPE相關問題的模糊描述。請再次澄清。 – BalusC
以及BalusC上面所說的,發佈實際的NPE跟蹤將有助於 – radai