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。
我的 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。