Java中的Servlet /过滤器特定异常处理

时间:2015-04-28 08:53:41

标签: java exception servlets exception-handling servlet-filters

我有一个扩展HttpServlet并实现GET请求的servlet。我还使用了一个过滤器(来自外部库),它被映射到上面的servlet url。现在,过滤器抛出异常,正如预期的那样,我得到了这个

  

SEVERE:servlet [myServlet]的Servlet.service()与上下文有关   path []抛出异常

我知道error-page描述可能是捕获此异常的标准方法,但有没有办法从特定的servlet过滤器中捕获异常?我已经有error-page个描述并重定向到一个简单的html页面。我也不想重定向到jsp页面左右,并使用错误参数。简而言之,我的问题是:

  • 是否有一种更简单,更优雅的方法来捕获特定 servlet的异常并处理它们? error-page描述符似乎没有任何字段可以选择抛出异常的servlet。
  • 是否有可能捕获特定过滤器内发生的异常并处理它们,因为过滤器抛出的异常不是自定义异常?

1 个答案:

答案 0 :(得分:5)

你能不扩展Filter并处理super?

抛出的异常
public class MyFilter extends CustomFilter{

        private static final Map<String, String> exceptionMap = new HashMap<>();

        public void init(FilterConfig config) throws ServletException {
              super.init(config);
              exceptionMap.put("/requestURL", "/redirectURL");
              exceptionMap.put("/someOtherrequestURL", "/someOtherredirectURL");
        }
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
           try{
                   super.doFilter(request, response, chain);
              }catch(Exception e)
                    //log
                    String errURL = exceptionMap.get(request.getRequestURI());
                    if(errURL != null){
                        response.sendRedirect(errURL);
                    }
              }
       }
}