0

目前我正在开发一个使用自定义 Servlet 过滤器来捕获所有异常的应用程序:

  <filter-mapping>
    <filter-name>ExceptionFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

try {
    chain.doFilter(request, response);
} catch (Throwable t) {
        if (request instanceof HttpServletRequest) {
            log.error(((HttpServletRequest) request).getRequestURL());
        }
        log.error("Exception:", t);
        String path = "/error.do";
        request.getRequestDispatcher(path).forward(request, response);
}
}

在调查了一段时间后,我发现 SimpleMappingExceptionResolver 是一种处理异常和视图映射的简单方法,并且正如我所见,我不能同时使用这两种方法,但我看不出有任何理由比另一种方法更喜欢一种方法。

我知道使用解析器将不同的错误映射到不同的视图更容易,但我们只使用一个错误视图,所以我更关心这两种解决方案的性能,如果其中一个能够处理更广泛的异常和这样的事情。

在此先感谢各位 Spring 专家

4

1 回答 1

0

老实说:在 Java 中可以做的最昂贵(就性能而言)的事情之一中抛出异常。(不要误会我的意思,这不是反对使用异常的声明。)。但是,如果您因为需要使用其中一个过滤器处理大量异常而严重遇到性能问题,那么您肯定会遇到另一个非常严重的问题。

因此,您不应该过多考虑过滤器或解析器的运行时性能。在更少的代码、更易理解的代码、更少的错误等方面多考虑哪一个更适合您的项目。

于 2012-04-20T19:06:54.247 回答