在Servlet中处理异常和错误页面

时间:2019-05-22 10:37:02

标签: java exception servlets error-handling

通过使用浏览器,当引发错误时,我可以正确地重定向到 web.xml 文件

中指定的自定义错误页面

但是为什么我总是在 curl 的输出中看到默认400 错误页面以及它的踪迹?我缺少处理的异常类型(我正在使用java.lang.Exception)或其他类型?

enter image description here

这是servlet的代码:

             {
            securityEntrySetting.Deleted = false;
            securityEntrySetting.UpdateDateTime = DateTime.Now;
            _context.SaveChanges();
        }

这是web.xml配置文件:

package test.company.com;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.Exception;

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

try {
  // stuff here ..

} catch (Throwable e) {
    // Log and throw the superclass Exception 
    LOGGER.log(Level.SEVERE, e.getMessage());
    throw new ServletException();
} 

}

2 个答案:

答案 0 :(得分:1)

在此处查看前两个答案:Which characters make a URL invalid?-您正在从命令行发送<aaa>,并且URL中不允许<>。当您在地址字段中输入这些字符时,浏览器会自动将这些字符编码为%3C%3E实体,但是curl不会-希望您知道自己在做什么。 ;-)因此,Tomcat甚至不会调用您的servlet,并以Bad Request(错误400)作为响应。

因此,在命令行中将<aaa>替换为%3Caaa%3E,您将进入servlet(可能还有预期的错误500)。

答案 1 :(得分:0)

通过在Tomcat 9的ErrorReportValve中设置server.xml配置类解决,现在错误堆栈跟踪不再可用:-)

enter image description here