java - Tomcat 或 Apache 容器修改了我的响应

标签 java apache tomcat servlets

我有一个 Web 应用程序,其中在 web.xml 中定义了过滤器、servlet 和错误处理

在错误处理中,我定义了需要处理错误的 servlet。

错误处理程序 servlet 可以访问请求和响应变量

它设置 http 状态 404 作为响应。

并且还在响应输出流中设置我的自定义错误页面。

就是这样。

但是当容器(稍后我会描述我的容器)返回响应给浏览器时,浏览器显示它自己的 404 页面而不是我自定义的错误页面。

在 chrome 浏览器-> 开发者工具中,我看到了 404 状态

如果我进行以下更改:错误页面 servlet 将 http 状态设置为 200 作为响应

我收到错误页面。 在 chrome 浏览器-> 开发者工具中,我看到了 200 状态

现在让我们回顾一下,此应用程序正在另一个容器中的生产环境中运行,代码略有修改(一些日志记录较少)。并且有错误页面 servlet 设置 404 作为响应。(显示自定义错误页面)

容器: 我的应用程序(它们都)有一个从 apache 和 tomcat 容器运行的设置。 Apache 用于提供静态内容 用于动态内容的 Tomcat。

这两个容器的区别只是Tomcat和apache的版本以及他们使用的Redhat版本的不同。

问题: 我该如何调试这个问题。 Tomcat/Apache 怎么会修改我设置的输出流。或者 apache/tomcat 已经完全修改了我的响应。

我的错误页面 servlet 有所有日志记录并且看起来不错,但似乎响应被容器修改了。

谢谢

最佳答案

如果数据流如下:

browser --> apache --> tomcat

然后 apache 可以有一个配置来提供 404 响应代码。 请确认您的请求通过 apache 并在此处发布配置。

本文可能对您有所帮助https://www.digitalocean.com/community/tutorials/how-to-create-a-custom-404-page-in-apache

关于java - Tomcat 或 Apache 容器修改了我的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900094/

相关文章:

java - 在 Gradle 项目中使用 Apache Commons IO

PHP 错误 : Access denied for user 'jobportal' @'localhost' (using password: YES)

apache - 通过 SSL 端口防止子域重定向

tomcat - 用于设置全局命名资源环境变量值的选项

java - 使用 getIntent 从另一个类获取时字符串为 null

java - 使用 iText 添加具有相同 fieldName 的 n 个文本字段

java - 语句关闭后不允许进行任何操作。 Java, MySQL

java - 特定字符的正则表达式

java - 部署 Java WAR 文件时出错 : SEVERE: Exception fixing docBase for context

tomcat - 没有Tomcat Manager时如何使用maven部署?