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

﹥>﹥吖頭↗ 提交于 2019-11-28 01:40: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:

<filter>
  <filter-name>ExceptionFilter</filter-name>
  <filter-class>com.example.ExceptionFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>ExceptionFilter</filter-name>
  <servlet-name>MyMainServlet</servlet-name>
</filter-mapping>

then add filter mappings for all your servlets.

Hope that helps.

use java util logging package its easy to use can be declared with every property method at backend while on front end where you want to make error visible to user show it using h:message tag in xhtml or jsf or also with f:ajax error handling tag

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!