Holen Sie sich die server-port-Nummer von tomcat ohne Anforderung
Gibt es eine Tomcat-API oder Konfiguration zur Verfügung, die erkennen kann, eine Anwendung (wahrscheinlich am Start), was-port seinen Betrieb auf, ohne einen Antrag?
Sich ein Szenario vorstellen, wo gibt es zwei web-Applikationen, die in der gleichen Tomcat-und von denen brauchen, die zum aufrufen eines web-service aus. Wir wollen nicht die Aufforderung zum verlassen des Tomcat (wenn Sie den Apache-server name oder absolute URL, die Anfrage wird gehen und wieder kommen und Sie gehen können, um jede Instanz) und kommen zurück in. Für, ich weiß den Namen der Maschine, aber keinen Weg, um die port-Nummer. Ich weiß, ich kann codieren dieser Informationen, aber ich will nicht zu tun, wie ich möchte, dass meine war
Datei application server-agnostisch.
Ich weiß, dass wir es finden können, wenn wir in ein HTTPServletRequest
Dies funktioniert nur für Tomcat 6 und nicht auf Tomcat 7
InformationsquelleAutor der Frage Teja Kantamneni | 2010-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit dabei:
Erhalten Sie eine Liste wie diese:
InformationsquelleAutor der Antwort ggrandes
Für jeden, der interessiert sich dafür, wie wir das Problem gelöst, hier ist die mock-code
InformationsquelleAutor der Antwort Teja Kantamneni
InformationsquelleAutor der Antwort Arun Maharana
Die server-port-Nummer existiert nicht. Es kann eine beliebige Anzahl von Portnummern. Also, was Sie Fragen, ist nicht sinnvoll. Die port-Nummer im Zusammenhang mit einer konkreten Anfrage hat Sinn machen.
InformationsquelleAutor der Antwort user207421
Überprüfen http://svn-mirror.glassfish.org/glassfish-svn/tags/embedded-gfv3-prelude-b07/web/web-glue/src/main/java/com/sun/enterprise/web/WebContainer.java Referenz
Den Inhalt der MBeanServer können dann ausgesetzt werden, die durch verschiedene Protokolle, umgesetzt durch die Protokoll-Steckverbinder[RMI/IIOP], oder Protokoll-Adapter[SNMP/HTTP]. In diesem Fall wird die Verwendung der SNMP-adapter wird ein besserer Ansatz, so dass eine SNMP-trap platziert werden können, ohne zu wissen, die genaue IP/port von anderen Anwendungsservern
InformationsquelleAutor der Antwort Puspendu Banerjee
Diese Arten von Servern sind entworfen, um in der Lage sein zu hören auf (fast) beliebige ports zu verstecken diese Informationen aus der enthaltenen Anwendungen, die normalerweise nicht brauchen, zu wissen.
Ist der einzige Weg, um die Konfiguration zu Lesen-Dateien selbst und haben Zugriff auf die Kommandozeilen-Argumente, die den server gestartet hat, wo die Konfigurations-Dateien wurden überschrieben. Sie haben eine Menge zu wissen über das system, das Sie für diese zu arbeiten. Es gibt keinen Weg, es zu tun portabel.
Selbst wenn dort waren, es gibt Fälle, in denen es einfach egal ist wie hinter einem NAT, bestimmte firewalls, etc.
InformationsquelleAutor der Antwort Allen
Könnten Sie crossContext. Aber ich glaube nicht, dass das app-server-agnostisch.
Ich würde teilen eine benutzerdefinierte Klasse, verhält sich wie ein Register der Laufenden Anwendungen in derselben tomcat-Instanz über JNDI, als ich erklärte,hier.
Während des Startvorgangs durch eine
ContextListener
oder durch eine Feder Behälter Fall, ich bekäme die Registrierung über ein JNDI-lookup auf meine web app-Instanz mit einer url erhalten Sie von den servletcontext.contextpath, und schließlich einen listener registrieren, um zu hören, andere Anwendungen registrieren sich selbst. Das ist der mehr-server-agnostisch ich denken kann.Erhalt der port nicht server-agnostisch sind, sollten Sie einen context-parameter.
EDIT: tut mir Leid, habe vergessen zu sagen, dass das, was ich beschrieben habe ist das teilen von Objekten zwischen Kontexten, aber Nein, Sie können nicht wissen, den Hafen, es sei denn, Sie verwenden einige server-API (nicht Agnostiker).
InformationsquelleAutor der Antwort mschonaker
Ich bin mir nicht ganz sicher, ob Sie Zugriff auf die Tomcat-port aus dem code in die Umwelt-Konfiguration, die Sie benötigen. Haben Sie halten tatsächlich die vollständige URL des web service übergeben werden, wie eine Konfiguration param/Einstellung (wahrscheinlich in einem .Eigenschaften-Datei) in die app?
Diese Weise würden Sie nicht hartcodieren den port und de-paar sowohl Ihre apps so, dass man technisch den web-service auf einem externen tomcat aber noch darauf zugreifen, nur durch ändern der Eigenschaft, die Vermeidung von code re-build.
InformationsquelleAutor der Antwort Sarat
Vorher auf einer großen verteilten Projekt, die design, die ich verwendet wurde, um die zentrale Dienstleistung initialisieren der mehreren Dienste mit den zentralen service-URL(& port).
Offensichtlich das bedeutet, dass der zentrale Dienst bleiben müssen, eine Liste der Dienste (URL & port) zu initialisieren.
InformationsquelleAutor der Antwort Ashley Walton
Wenn Sie wollen, um den Zugriff einer Anwendung auf dem gleichen server-Instanz, nur das weglassen der server-Teil der URL. Einige Beispiele, was man erreichen kann. Das aktuelle Dokument ist in
http://example.com:8080/app2/doc.html
xxx.html
wirdhttp://example.com:8080/app2/xxx.html
../xxx.html
wirdhttp://example.com:8080/xxx.html
../xxx.html
wirdhttp://example.com:8080/xxx.html
../foo/xxx.html
wirdhttp://example.com:8080/foo/xxx.html
../../xxx.html
wirdhttp://example.com:8080/xxx.html
(es gibt keinen Weg zu gehen, jenseits der Wurzel)/xxx.html
wirdhttp://example.com:8080/xxx.html
Dies ist wahrscheinlich das, was Sie suchen.//other.com/xxx.html
wirdhttp://example.com:8080/xxx.html
Nützlich, wenn Sie möchten, halten Sie "https:"InformationsquelleAutor der Antwort Aaron Digulla
Hmm, wie würde eine Anwendung den Einstieg in das Tomcat-ohne Antrag? Vielleicht werde ich Gehirn tot für einen moment hier, aber ich glaube nicht, dass alle Klassen, die geladen wird, bis eine Anforderung trifft. Sicher hätte man die Klassen unabhängig von irgendeinem besonderen Wunsch, aber Sie müssten einen Antrag zu bekommen, Sie feuerte an einem gewissen Punkt.
InformationsquelleAutor der Antwort Jay