Я пытаюсь зафиксировать ошибку 404, используя фильтр, определенный в web.xml. Я определил свой фильтр следующим образом
public class StatusValidationFilter implements Filter
{
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse,
FilterChain filterchain) throws IOException, ServletException
{
HttpServletResponse response = (HttpServletResponse)servletresponse;
if (!(response instanceof StatusExposingServletResponse))
{
response = new StatusExposingServletResponse(response);
}
filterchain.doFilter(servletrequest, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
Я определил свою обертку так:
public class StatusExposingServletResponse extends HttpServletResponseWrapper
{
public StatusExposingServletResponse(HttpServletResponse response) {
super(response);
}
public void sendError(int sc) throws IOException {
if(sc == HttpServletResponse.SC_NOT_FOUND)
{
throw new RuntimeException();
}
super.sendError(sc);
}
public void sendRedirect(String location) throws IOException {
super.sendRedirect(location);
}
}
Хорошо, тогда в файле web.xml определены фильтр и сопоставления, подобные этому:
<filter>
<filter-name>StatusValidationFilter</filter-name>
<filter-class>com.test.StatusValidationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>StatusValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Но не перехватывает ошибку 404, просто вызывает фильтр, когда URL-адрес сопоставляется с URL-адресом, сопоставленным с помощью ActionServlet, то есть завершается с .do
Я попытался изменить свойство в WAS com.ibm.ws.webcontainer.invokeFiltersCompatibility = true, но все еще не работает, и у меня нет других идей о том, как это исправить, любая помощь будет оценена.