Tomcat 8在HTML表单提交后重定向

时间:2016-05-09 15:34:13

标签: java html tomcat tomcat7 tomcat8

我的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,其中提供了有关重定向如何发生的更多详细信息。

1 个答案:

答案 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。