一尘不染

禁用Tomcat中的所有默认HTTP错误响应内容

tomcat

默认情况下,Tomcat的发送一些HTML内容返回给客户端,如果它通过遇到类似的HTTP 404。我知道,web.xml一个<error-page>
可以配置自定义此内容。

但是,我只希望Tomcat 不发送任何 响应内容(当然,我仍然希望状态码)。有什么方法可以轻松配置它吗?

我试图避免A)从我的Servlet在响应流上显式发送空内容,以及B)在我的中为一堆HTTP错误状态配置自定义错误页面web.xml

在某些背景下,我正在开发HTTP API并控制自己的响应内容。因此,例如对于HTTP 500,我在响应中填充了一些XML内容,其中包含错误信息。对于HTTP
404之类的情况,HTTP响应状态对于客户端来说足够了,并且tomcat正在发送的内容是不必要的。如果有其他方法,我愿意听。

编辑:
经过不断调查,我仍然找不到解决方案的方法。如果有人可以明确地说这是不可能的,或者提供了一个资源证明它行不通,那么我将接受它作为答案并尝试解决它。


阅读 371

收藏
2020-06-16

共1个答案

一尘不染

如果您不想tomcat显示错误页面,则不要使用sendError(…)。而是使用setStatus(…)。

例如,如果您想给出405响应,那么您可以

response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);      
response.getWriter().println("The method " + request.getMethod() + 
   " is not supported by this service.");

还请记住不要从servlet抛出任何异常。而是捕获Exception,然后再次设置自己的statusCode。

protected void service(HttpServletRequest request,
      HttpServletResponse response) throws IOException {
  try {

    // servlet code here, e.g. super.service(request, response);

  } catch (Exception e) {
    // log the error with a timestamp, show the timestamp to the user
    long now = System.currentTimeMillis();
    log("Exception " + now, e);
    response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    response.getWriter().println("Guru meditation: " + now);
  }
}

当然,如果您不想要任何内容​​,则只需不向写者写任何东西,只需设置状态即可。

2020-06-16