我在web.xml
文件中有这个XML:
<error-page>
<error-code>404</error-code>
<location>/error/html/404</location>
</error-page>
如果我转到/indexer
这样的网页(不存在),那么我会被正确地重定向到网址/error/html/404
。如果我转到/index/nope
这样的页面(也不存在),那么我是一个空白页面,URL会显示/index/error/html/404
。无论我从哪里开始,我都可以在location
标记中添加正确的网址?
答案 0 :(得分:1)
这不是正常行为。它绝对应该与上下文根相关。我引用了Servlet 3.0 specification的第154页:
子元素
location
元素包含Web中资源的位置 应用程序相对于Web应用程序的根目录。位置的价值 必须有一个前导‘/’
。
您的问题是由使用的servletcontainer中的错误引起的。报告和/或升级到最新版本。或者,对于Filter
的{{1}}网址格式错误地使用ERROR
,/*
调度程序可能是RequestDispatcher#forward()
拦截错误。
更新,您使用的是Tomcat 7.0.16,这是一个与Servlet 3.0兼容的容器。虽然声明web.xml
符合Servlet 2.5而不是3.0,但我无法在本地Tomcat 7.0.11,7.0.19和7.0.22上同时复制web.xml
版本的问题。此外,URL在浏览器地址栏中不会更改(并且不应更改)。只有原始(错误)的URL仍保留在浏览器地址栏中。这让我觉得这很可能是由于错误的过滤器或可能是前端控制器servlet引起的,它被映射到/*
的过于通用的URL模式,并且正在向错误的URL发送重定向。在webapp中检查这样的过滤器或servlet,进行相应的调试和修复。