2010-04-07 11 views
37

? Creo que ServletContext podría proporcionar un método. ¿El método getAttribute() de ServletContext proporciona alguna ayuda, es decir, hay un nombre de atributo (tal vez "host", "port") que será de ayuda.¿Cómo puedo obtener el nombre de host (con puerto) que un servlet está en

La razón de esto es que quiero que mi aplicación se ejecute donde sea que esté desplegada, y en un punto tengo que permitir que un usuario haga clic en un enlace que apunta a una ubicación en el servidor de archivos. Por lo tanto, necesito hacer referencia por el host y el puerto y no puedo usar una referencia interna.

Respuesta

51
ServletRequest.getServerName(...) 
ServletRequest.getServerPort(...) 
+0

Esto ya no funciona. Todavía estoy descubriendo cómo hacerlo ahora. –

14

El objeto ServletRequest que se ha transmitido a su doGet, o método doPost tiene getServerName y getServerPort métodos que proporcionan esta información.

por ejemplo

public void doGet(ServletRequest request, ServletResponse response) { 
    System.out.println("Host = " + request.getServerName()); 
    System.out.println("Port = " + request.getServerPort()); 
} 
+1

Para obtener una url: 'request.getServerName() +": "+ request.getServerPort();' –

3

que he encontrado en mi viejo proyecto de la cadena:

request.getHeader("host").contains("xxx")

tal vez es la solución?

2

Como otros mencionados anteriormente, host y el puerto pueden ser recuperados a través de petición. Por otro lado, es imposible que ServletContext proporcione la información ya que las aplicaciones de Java no conocen su entorno de host. es decir, una aplicación con la ruta de contexto "foo" (que podría ser recuperada por ServletContext # getContextPath()) podría recibir solicitudes desde un puerto http 8080 y un puerto https 8043. Referencia: https://web.archive.org/web/20120401225136/http://www.java.net:80/node/701934

+0

FYI, el enlace ya no funciona – Stormcloud

2

@Todo el mundo tiene una buena respuesta . Pero tomando el esquema, el nombre del servidor y el puerto, luego agréguelos. Hay una manera más simple:

Puede usar HttpServletRequest.getRequestURL y HttpServletRequest.getRequestURI.

StringBuffer url = request.getRequestURL(); 
String uri = request.getRequestURI(); 
String host = url.substring(0, url.indexOf(uri)); //result 
Cuestiones relacionadas