SimpleMappingExceptionResolver vs ExceptionFilter

时间:2012-04-20 16:40:53

标签: spring exception-handling servlet-filters

目前我正在使用自定义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是一种处理异常和查看映射的简单方法,因为我看到我不能同时使用这两种方法,但我看不出有任何理由偏向另一种方法。

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

提前感谢所有春季专家

1 个答案:

答案 0 :(得分:0)

老实说:在Java中可以做的最昂贵的(在性能方面)抛出一个例外。 (不要误解我的意思,这是禁止使用异常的声明。)。但是如果你因为需要使用其中一个过滤器处理很多异常而严重遇到性能问题,那么你肯定会遇到另一个非常严重的问题。

因此,您不应该过多考虑Filter或Resolver的运行时性能。从更少的代码,更易理解的代码,更少的错误,更多地考虑哪一个更适合您的项目....