Ich habe eine Webanwendung, die Benutzer auf ihren eigenen Java-Webservern (z. B. Tomcat) bereitstellen. Die Java-Seite der Webanwendung muss die URL der Webanwendung selbst melden (z. B. http://aServer.com:8080/MyApp oder https://blah.blahSever/MyApp). Da jedoch eine Reihe von Benutzern Portweiterleitungen und andere Netzwerktechniken verwendet, meldet die Webanwendung häufig den falschen Namen.So erhalten Sie den Servernamen in einer Java-Webanwendung
Ich habe die folgenden Techniken ausprobiert, aber oft produzieren sie nicht das, was der Benutzer benötigt.
Note (Anfrage ist ein 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
Die Verwendung von InetAddress nahe kommt, was ich will, aber da wir Server-Aliase und Proxypass in unserem Apache2-Server verwenden, wird der Wert von InetAddress ist die Ist-Werte des Servers statt der Alias.
Die einzige Technik, die ich mir vorstellen kann, ist, dass der Benutzer eine Eigenschaft in einer Eigenschaftendatei bereitstellt, die die Webanwendung beim Start liest. Wenn die Eigenschaft festgelegt ist, wird mit diesem Wert der vollständige Webanwendungspfad zurückgegeben (z. B. serverUrl = https://blah.blahServer/MyApp). Diese Technik würde funktionieren, erfordert jedoch mehr Bereitstellungsarbeit für meine Kunden.
Hat jemand irgendwelche Ideen, wie ich eine elegantere Lösung erreichen kann?
Danke, Phil
Setzen Sie die Adresse in eine Systemeigenschaft und verwenden Sie diese. Wenn Sie es auf einen anderen Server legen, ändern Sie die Eigenschaft. Veranlassen Sie, dass die App den Start verweigert, wenn die Eigenschaft nicht festgelegt ist. – Kayaman
Haben Sie 'request.getRequestURL()' ausprobiert? –
@Mustafa Genc - Leider gibt getRequestUrl einfach zurück: http: // localhost: 8080/MyApp/- das ist nett und vollständig (es enthält http und den Port und den Namen der Web App), aber leider gibt "localhost" zurück! – Phil