我覺得有一些解決方案獨立的Jersey
可以實現在Java Web應用程序捕獲所有異常。我假設你的項目有web.xml
-
1)使用過濾器 - 您可以添加在你的web應用程序一個filter
和捕獲所有異常出現。 Filter
就像一個可以在處理任何請求之前調用的攔截器。
可以在web.xml
定義過濾器 -
<filter>
<filter-name>exceptionFilter</filter-name>
<filter-class>com.MyExceptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>exceptionFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
現在定義MyExceptionFilter
類 -
public final class MyExceptionFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
try {
// forward request to subsequent filter/resource/servlet
filterChain.doFilter(request, response);
} catch (Throwable ex) {
// do whatever you want in case any exception occurred and not caught in the request processing class
// forward request to error page
request.getRequestDispatcher("/ErrorPage.jsp").forward(request, response);
}
}
@Override
public void destroy() {
}
}
問題這種方法是有可能在Web應用程序中定義多個過濾器。這些過濾器如何被調用的順序並不固定。
2)錯誤頁面 - 您也可以爲Web應用程序定義錯誤頁面。在web.xml
,添加下面線 -
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/ExceptionHandler</location>
</error-page>
然後定義ExceptionHandler
的servlet -
@WebServlet("/ExceptionHandler")
public class ExceptionHandler extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processException(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processException(request, response);
}
private void processException(HttpServletRequest request,
HttpServletResponse response) throws IOException {
Throwable throwable = (Throwable) request
.getAttribute("javax.servlet.error.exception");
// do whatever you want to do with exception
// forward request to error page
request.getRequestDispatcher("/ErrorPage.jsp").forward(request, response);
}
}