默认情况下,Tomcat的发送一些HTML内容返回给客户端,如果它通过遇到类似的HTTP 404。我知道,web.xml一个<error-page> 可以配置自定义此内容。
web.xml
<error-page>
但是,我只希望Tomcat 不发送任何 响应内容(当然,我仍然希望状态码)。有什么方法可以轻松配置它吗?
我试图避免A)从我的Servlet在响应流上显式发送空内容,以及B)在我的中为一堆HTTP错误状态配置自定义错误页面web.xml。
在某些背景下,我正在开发HTTP API并控制自己的响应内容。因此,例如对于HTTP 500,我在响应中填充了一些XML内容,其中包含错误信息。对于HTTP 404之类的情况,HTTP响应状态对于客户端来说足够了,并且tomcat正在发送的内容是不必要的。如果有其他方法,我愿意听。
编辑: 经过不断调查,我仍然找不到解决方案的方法。如果有人可以明确地说这是不可能的,或者提供了一个资源证明它行不通,那么我将接受它作为答案并尝试解决它。
如果您不想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); } }
当然,如果您不想要任何内容,则只需不向写者写任何东西,只需设置状态即可。