我的webapp的管理界面中有一个HTML表单。它是一个很大的形式,所以我省略了输入元素,但相关的标签看起来像:
<form id="config" action="updateConfig" method="POST">
<input type="submit" value="Save configuration" name="submit1"/>
...
...
</form>
这是托管在http://servername:port/webapp/admin,点按按钮即可将表单提交至http://servername:port/webapp/admin/updateConfig 并刷新页面(即重新加载http://servername:port/webapp/admin)
这适用于所有浏览器组合中的Tomcat 7。
然而,对于Tomcat 8,它的行为有所不同。使用Firefox,Chrome和Safari时,表单提交有效,但浏览器会尝试重定向到http://servername:port/webapp/admin/updateConfig。它与以前一样使用IE / Edge
我搜索过Tomcat 8文档,但无法找到任何可能导致此行为的明显更改。任何帮助都将非常感激。
可以在此处找到错误报告:https://github.com/Reading-eScience-Centre/edal-java/issues/54#issuecomment-212529593,其中提供了有关重定向如何发生的更多详细信息。
答案 0 :(得分:1)
好的,经过一些实验,我发现了这一点。问题是webapp发送了一个空白重定向:
response.sendRedirect("")
在Tomcat&lt; = 7中,那是重定向到http://servername:port/webapp/admin(即提交帖子的页面),而在Tomcat 8中,它被区别对待。从标题看来,似乎Tomcat 7正在拦截重定向并明确地将完整的URL插入到&#34; Location&#34;标题,而Tomcat 8只发送一个空位置,在不同的浏览器上进行不同的解释。
因此解决方案是将重定向更改为:
response.sendRedirect("./")
适用于Tomcat 7和Tomcat 8。