java中特定于servlet/filter的异常处理

velaa5lx  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(369)

我有一个服务器 HttpServlet 以及实施 GET 请求。我还使用一个过滤器(来自外部库),它Map到上面的servlet url。现在过滤器抛出了一个异常,正如预期的那样
严重:路径为[]的上下文中servlet[myservlet]的servlet.service()引发异常
我知道 error-page 描述可能是捕获此异常的标准方法,但是有没有从特定servlet过滤器捕获异常的方法?我已经有一个 error-page 描述和重定向到一个简单的html页面。我也不想重定向到一个jsp页面或者其他页面,而去处理错误参数。简而言之,我的问题是:
有没有更简单、优雅的方法来捕获特定servlet的异常并处理它们?这个 error-page 描述符似乎没有任何字段可以选择引发异常的servlet。
如果筛选器抛出的异常不是自定义异常,是否可以捕获特定筛选器内部发生的异常并对其进行处理?

mlmc2os5

mlmc2os51#

不能扩展筛选器并处理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);
                    }
              }
       }
}

相关问题