我有一个 Web 应用程序,用户需要在他们自己的 Java Web 服务器上部署(例如 Tomcat)。Web 应用程序的 Java 部分需要报告 Web 应用程序本身的 URL(例如 http://aServer.com:8080/MyApp 或 https://blah.blahSever/MyApp 的形式)。然而,由于许多用户使用端口转发和其他网络技术,Web 应用程序经常报告错误的名称。
我已尝试以下技术,但通常它们并不能生成用户需要的结果。
注意(request 是一个 HttpServletRequest)
request.getLocalAddr(); // Returns: 127.0.0.1
request.getLocalName(); // Returns: localhost
request.getServerName(); // Returns: localhost
request.getServerPort(); // Returns: 8080
request.getContextPath(); // Returns: /MyApp
request.getScheme(); // Returns: http
InetAddress.getLocalHost().getHostName(); // Returns: serverXXX-XXX-XXX-XX.xxxx-xxxxxxx.net
InetAddress.getLocalHost().getHostAddress(); // Returns: xxx.xxx.xxx.xxx (ip address)
InetAddress.getLocalHost().getCanonicalHostName(); // Returns: serverXXX-XXX-XXX-XX.xxxx-xxxxxxx.net
InetAddress的使用接近于我想要的,但由于我们在Apache2服务器中使用Server Aliases和ProxyPass,因此InetAddress的值是实际服务器的值,而不是别名的值。
我唯一想到的解决方案是让用户在属性文件中提供一个属性,Web应用程序在启动时读取该属性。如果设置了该属性,则使用该值返回完整的Web应用程序路径(例如serverUrl = https://blah.blahServer/MyApp)。这种技术可以工作,但需要为我的客户进行更多的部署工作。
有没有人有任何想法,可以实现一个更加优雅的解决方案呢?
谢谢, Phil
request.getRequestURL()
吗? - Mustafa Genç