我有一个 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/