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 ?
解决方案
Can you not extend the Filter and handle the exception thrown by super?
public class MyFilter extends CustomFilter{
private static final Map 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);
}
}
}
}