[Q] Как отловить ошибку 404: SRVE0190E - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь зафиксировать ошибку 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, но все еще не работает, и у меня нет других идей о том, как это исправить, любая помощь будет оценена.

1 Ответ

0 голосов
/ 27 октября 2013

Вам необходимо установить

com.ibm.ws.webcontainer.invokefilterscompatibility=true

в Серверы -> Сервер -> Настройки веб-контейнера -> Веб-контейнер -> Пользовательские свойства.

Подробнее на: http://frightanic.com/software-development/solution-to-error-404-srve0190e-on-websphere-6-1

...