Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Servlet/filter specific exception handling in java

I have a servlet extending HttpServlet and implementing a GET request. I also use a filter (from an external library) which is mapped to the above servlet url. Now an exception is thrown by the filter, and as expected I get this

SEVERE: Servlet.service() for servlet [myServlet] in context with path [] threw exception

I know error-page description is probably a standard way to catch this exception, but is there a way to catch the exception from a specific servlet filter ? I already have an error-page description and redirecting to a simple html page. I also don't want to redirect to a jsp page or so, and play around with error parameters. In short, my questions are :

  • Is there a simpler, elegant way to catch an exception for a specific servlet and handle them ? The error-page descriptor doesn't seem to have any fields to choose the servlet which throws an exception.
  • Is it possible to catch an exception occuring inside a specific filter and handle them, given that the exception thrown by the filter is not a custom exception ?
like image 868
Alavalathi Avatar asked Apr 28 '15 08:04

Alavalathi


1 Answers

Can you not extend the Filter and handle the exception thrown by 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);
                    }
              }
       }
}
like image 160
ramp Avatar answered Sep 22 '22 18:09

ramp