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

Tomcat 8 redirecting after HTML form submit

我的 Web 应用程序的管理界面中有一个 HTML 表单。这是一个大表格,所以我省略了输入元素,但相关标签如下所示:

<form id="config" action="updateConfig" method="POST">
    <input type="submit" value="Save configuration" name="submit1"/>
...
...
</form>

这是托管在 http://servername:port/webapp/admin and clicking the button should submit the form to 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,其中提供了有关重定向如何发生的更多详细信息。

好的,经过一些实验我已经弄明白了。问题是 webapp 发送了一个空白的重定向:

response.sendRedirect("")

在 Tomcat <=7 中,重定向到 http://servername:port/webapp/admin(即提交 post 的页面),而在 Tomcat 8 中,它被处理不同的。从 headers 看来,Tomcat 7 正在拦截重定向并将完整的 URL 显式插入 "Location" header,而 Tomcat 8 只是发送一个空位置,它在不同的浏览器上有不同的解释。

因此,解决方案是将重定向更改为:

response.sendRedirect("./")

适用于 Tomcat 7 和 Tomcat 8。