tomcat 9.0.6+转发错误页面后的重定向无法显示

tomcat


发表于 2018-04-24 22:04


这个bug已经在9.0.9+中被修复了

前几天将tomcat从9.0.1升级到了9.0.7,一切正常,但是发现错误页面重定向后无法正常显示。我的跳转逻辑如下:

path1:
setStatus(404)
forward->path2

path2:
redirect->page

9.0.1能够正常显示页面,但是9.0.7无法显示页面,浏览器直接显示状态码。尝试将404改成了200状态码后,发现页面又能够正常显示了。于是怀疑是状态码的原因,尝试在跳转前重置跳转码,看了一圈,发现只有response.reset()可以做到,先调用reset之后重定向,果然可以正常显示页面了。 最终逻辑如下:

path1:
setStatus(404)
forward->path2

path2:
response.reset()
redirect->page

暂时用这个方法解决问题吧,不知道这算不算一个bug,还是tomcat处理逻辑的变更,9.0.2~9.0.6之间的版本挨个测试了下,发现直到9.0.6版本才会出现这个问题。有兴趣的可以看下文件变更:https://github.com/apache/tomcat/compare/TOMCAT_9_0_5...TOMCAT_9_0_6 我是看不懂。。。

附上我测试用的代码 test.zip,在tomcat 9.0.6中,访问{contextPath}/path1无法显示,访问{contextPath}/path3可以显示,访问${contextPath}/path1?reset=1可以显示。


搜索