Cómo puedo obtener un nombre de host (con puerto) en el que se encuentra un servlet


Pensé que ServletContext podría proporcionar un método. El método getAttribute() de ServletContext proporciona alguna ayuda, es decir, si hay un nombre de atributo (tal vez "host", "port") que será de ayuda.

La razón de esto es que quiero que mi aplicación se ejecute dondequiera que se despliegue, y en un momento 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.

Author: Ankur, 2010-04-07

5 answers

ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
 53
Author: Everyone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-07 09:31:37

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

Eg

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host = " + request.getServerName());
    System.out.println("Port = " + request.getServerPort());
}
 14
Author: Tom Jefferys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-07 09:16:48

He encontrado en mi antiguo proyecto la cadena:

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

Tal vez es la solución?

 3
Author: user310791,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-26 06:38:46

@Todos tienen una buena respuesta. Pero tomando el esquema, el nombre del servidor y el puerto luego mergin ellos. 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
 3
Author: Amit G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-23 08:21:29

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

 2
Author: Fang Zhen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-09 16:35:42