how do I catch errors globally, log them and show user an error page in J2EE app

后端 未结 2 954
天命终不由人
天命终不由人 2020-12-06 23:05

I have searched this topic on google a bit and seen some best practices. But I need some specific advice. I am working on a J2EE app that has servlets/Struts2/Call to DAO\'

2条回答
  •  囚心锁ツ
    2020-12-06 23:59

    I expect this is already solved in some way by Struts - so best check struts docco. If i were you i'd write an ExceptionFilter that can wrap your servlet calls:

    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.log4j.Logger;
    
    public class ExceptionFilter implements Filter{
    
    private static final Logger logger = Logger.getLogger(ExceptionFilter.class);
    private ExceptionService exceptionService = null;
    @Override
    public void destroy() {
        exceptionService.shutdown();
    }
    
    @Override
    public void doFilter(ServletRequest rq, ServletResponse rs, FilterChain chain) throws IOException, ServletException {
        try {
            chain.doFilter(rq, rs); // this calls the servlet which is where your exceptions will bubble up from
        } catch (Throwable t) {
            // deal with exception, then do redirect to custom jsp page
            logger.warn(t);
            exceptionService.dealWithException(t); // you could have a service to track counts of exceptions / log them to DB etc
            HttpServletResponse response = (HttpServletResponse) resp;
            response.sendRedirect("somejsp.jsp");
        }
    }
    
    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        exceptionService = new ExceptionService();
    }
    
    }
    

    and add this to your web.xml:

    
      ExceptionFilter
      com.example.ExceptionFilter
    
    
    
      ExceptionFilter
      MyMainServlet
    
    

    then add filter mappings for all your servlets.

    Hope that helps.

提交回复
热议问题