Ich denke, es gibt einige Lösungen unabhängig von Jersey
, die Sie zum Abfangen aller Ausnahmen in einer Java-Webanwendung implementieren können. Ich gehe davon aus, dass Ihr Projekt web.xml
hat -
1) Filter Mit - Sie eine filter
in Ihrer Web-Anwendung hinzufügen und alle Ausnahmen dort fangen. Filter
ist wie ein Interceptor, der vor der Verarbeitung einer Anfrage aufgerufen werden kann.
können Sie Filter definieren, in 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>
Jetzt MyExceptionFilter
Klasse definieren -
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() {
}
}
Problem bei diesem Ansatz ist, dass es möglich ist, mehrere Filter in einer Web-Anwendung zu definieren. Die Reihenfolge, wie diese Filter aufgerufen werden, ist nicht festgelegt.
2) Fehler Seite - Sie können auch eine Fehlerseite für die Webanwendung definieren. In web.xml
, fügen Sie unter Linien -
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/ExceptionHandler</location>
</error-page>
und dann ExceptionHandler
Servlet definieren -
@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);
}
}