return 到集群环境中的 servlet

return to servlet in clustered environment

我有一个简单的问题。我希望

httpServletResponse.setHeader(“Location”, httpServletRequest.getRequestURL().toString())

会 return 自己。但是在我们带有 IIS 和多个 TOMCAT 的

的集群基础架构中
httpServletRequest.getRequestURL() 

指向 IIS(集群管理器)。这是正确的行为吗,因为我不确定?重定向目前失败。 我知道我可以使用相对地址(并且有效),但我只想知道观察到的行为(重定向失败)是否符合预期?

重定向向客户端(浏览器)发送响应,有效地要求浏览器发送一个全新的请求。

这样做的结果是路线将从头开始。如果应用程序服务器前面有反向代理和负载平衡器,则重定向有可能转到应用程序的不同实例(不同的集群成员)。

要将请求发送到同一服务器上同一应用程序中的不同资源,请使用 forward 而不是发送重定向:

httpServletRequest.getRequestDispatcher(httpServletRequest.getContextPath())
       .forward(request, response);

以上代码理论上会将请求发送到同一个servlet实例。

The redirect fails at the moment.

失败的原因有很多。最有可能的是您的反向代理 (IIS) 正在使用本地网络地址与您的应用程序服务器通信(例如 Host header 中的内部 IP 地址等)。您可能需要重定向到浏览器最初使用的主机名(如果域名已知,或者您可以使反向代理以某种方式转发 Host header)。一些反向 proxies/web 服务器支持重写。