2010-09-27 31 views
7

Estoy tratando de obtener el nombre de dominio de la url con JSTL. Los 2 métodos que conozco devuelven la información incorrecta. Necesito exactamente lo que está en la URL.¿Obtener el nombre de dominio en la URL con JSTL?

Cuando hago:

${pageContext.request.remoteHost} 

consigo IP de mi servidor.

Cuando hago:

${pageContext.request.serverName} 

que normalmente recibe el nombre de dominio correcto, pero en el servidor tenemos en Amazon su regreso "server1" en lugar del nombre de dominio correcto, probablemente debido a la forma en que maneja dominios múltiples

¿Alguien sabe cómo puedo obtener el nombre de dominio actual en la URL?

Es posible que necesite obtener la URL y luego analizarla. ¿Como podría hacerlo?

Respuesta

1

Puede utilizar HttpServletRequest.getRequestUrl() a:

reconstruye la URL del cliente que se utiliza para realizar la solicitud. La URL devuelta contiene un protocolo, nombre de servidor, número de puerto y ruta del servidor, pero no incluye parámetros de cadena de consulta.

devolvería una cadena como Get domain name in url with JSTL?

A continuación, debería ser trivial para analizar esto para encontrar la cadena que se produce después de the scheme (http, https, etc.) y antes de the requestURI.

2

Usted puede analizar nombre de dominio de la URL

O

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

bien, eso es lo que tengo que saber cómo hacerlo. Es posible que deba explicar mejor mi pregunta. ¿Cómo obtengo la url y la analizo? – UpHelix

+0

@Dale actualizado ... –

12

En su lugar, debe usar ServletRequest#getLocalName(). Devuelve el nombre de host real del servidor. El ServletRequest#getServerName() de hecho devuelve el valor establecido en el encabezado Host.

${pageContext.request.localName} 

Eso es todo. Las soluciones sugeridas en otras respuestas son simples torpes y hacky.


Por cierto, el ServletRequest#getRemoteHost() no devuelve el nombre del servidor, pero uno de los clientes (o el nombre de host IP cuando el no es inmediatamente resolveable). Es obviamente el mismo que el del servidor cada vez que ejecuta tanto el servidor web como el navegador web físicamente en la misma máquina. Si está interesado en la IP del servidor, use ServletRequest#getLocalAddr(). Los términos "local" y "remoto" deben interpretarse desde la perspectiva del servidor, no desde el del cliente. Después de todo, el servidor allí donde se ejecuta todo el código Java.

+0

localName devuelve 127.0.0.1 aquí. El motivo parece ser que utilizo un servidor web como proxy de paso a babor. – koppor

-3

$ {} pageContext.request.contextPath

+0

La ruta del contexto no es el nombre de host. – Fordi

+0

.. es el nombre del contexto webapp/current – Timo

Cuestiones relacionadas