2010-09-27 11 views
7

Próbuję uzyskać nazwę domeny z adresu url za pomocą JSTL. Dwie znane mi metody zwracają błędne informacje. Potrzebuję dokładnie tego, co jest w adresie URL.Uzyskaj nazwę domeny w adresie URL za pomocą JSTL?

Kiedy zrobić:

${pageContext.request.remoteHost} 

uzyskać adres IP mojego serwera.

Kiedy zrobić:

${pageContext.request.serverName} 

normalnie dostać odpowiednią nazwę domeny, ale na serwerze mamy na amazon jego powrocie „server1” zamiast prawidłowej nazwy domeny, prawdopodobnie ze względu na sposób, w jaki uchwyty wiele domen.

Ktoś wie, w jaki sposób mogę uzyskać aktualną nazwę domeny w adresie URL?

Może będę musiał pobrać adres URL, a następnie przeanalizować go. Jak to zrobić?

Odpowiedz

2

można zanalizować nazwy domeny z URL

LUB

public static String getDomainName(String url) 
    { 
     URL u; 
     try { 
      u = new URL(url); 
     } 
     catch (Exception e) { 
      return ""; 
     } 
     return u.getHost(); 
    } 
+0

Dobra, to co muszę wiedzieć, jak to zrobić. Mogę potrzebować lepszego wyjaśnienia mojego pytania. Jak uzyskać adres URL i przeanalizować go? – UpHelix

+0

@Dale updated .. –

12

Zamiast tego należy użyć ServletRequest#getLocalName(). Zwraca prawdziwą nazwę hosta serwera. ServletRequest#getServerName() rzeczywiście zwraca wartość ustawioną w nagłówku Host.

${pageContext.request.localName} 

To wszystko. Rozwiązania sugerowane w innych odpowiedziach są proste i niezręczne.


By the way, ServletRequest#getRemoteHost() nie zwraca nazwę hosta serwera, ale jeden klienta (lub IP hosta, gdy nie jest od razu resolveable). Jest on oczywiście taki sam, jak serwer, gdy uruchamiasz zarówno serwer WWW, jak i przeglądarkę internetową na tym samym komputerze. Jeśli jesteś zainteresowany adresem IP serwera, użyj ServletRequest#getLocalAddr(). Terminy "lokalny" i "zdalny" należy interpretować z perspektywy serwera, a nie z klienta. To przecież serwer tam, gdzie działa cały ten kod Java.

+0

localName zwraca tutaj 127.0.0.1. Powodem wydaje się być to, że korzystam z serwera sieciowego jako pośrednika pośredniego dla mola. – koppor

-3

$ {pageContext.request.contextPath}

+0

Ścieżka kontekstu nie jest nazwą hosta. – Fordi

+0

.. to nazwa webapp/aktualnego kontekstu – Timo