小编典典

当servlet发生异常时,如何重定向到错误页面?

jsp

我正在编写一个servlet,因为如果发生任何异常,我不想在浏览器上显示异常/错误消息,因此我将重定向到我的自定义错误页面。所以我这样做是这样的:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
try{
    //Here is all code stuff
}catch(Exception e){

  request.getRequestDispatcher("/ErrorPage.jsp").forward(request, response);
  e1.printStackTrace();

}

这是正确的方法吗,如果我错了,请纠正我;如果有更好的机制,请告诉我。


阅读 502

收藏
2020-06-10

共1个答案

小编典典

以通用方式处理它的唯一方法是使用web.xml如下所示:

<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/ErrorHandler</location>
</error-page>

抛出servlet
ServletExceptionIOException但是如果您想在单个异常处理程序中处理运行时异常和所有其他异常,则可以将异常类型提供为Throwable。您可以使用多个错误页面条目,这些条目将处理不同类型的异常并具有不同的处理程序。

例:

@WebServlet("/ErrorHandler")
public class ErrorHandler extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processError(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        processError(request, response);
    }
    private void processError(HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        //customize error message
        Throwable throwable = (Throwable) request
                .getAttribute("javax.servlet.error.exception");
        Integer statusCode = (Integer) request
                .getAttribute("javax.servlet.error.status_code");
        String servletName = (String) request
                .getAttribute("javax.servlet.error.servlet_name");
        if (servletName == null) {
            servletName = "Unknown";
        }
        String requestUri = (String) request
                .getAttribute("javax.servlet.error.request_uri");
        if (requestUri == null) {
            requestUri = "Unknown";
        }    
        request.setAttribute("error", "Servlet " + servletName + 
          " has thrown an exception " + throwable.getClass().getName() +
          " : " + throwable.getMessage());    
        request.getRequestDispatcher("/ErrorPage.jsp").forward(request, response);
    }
}
2020-06-10