web-dev-qa-db-fra.com

Comment obtenir un nom d'hôte (avec port) sur lequel se trouve une servlet

Je pensais que ServletContext pourrait fournir une méthode. La méthode getAttribute () de ServletContext fournit-elle une aide, c'est-à-dire qu'il existe un nom d'attribut (peut-être "Hôte", "port") qui sera utile.

La raison en est que je veux que mon application s'exécute partout où elle est déployée, et à un moment donné, je dois autoriser un utilisateur à cliquer sur un lien qui pointe vers un emplacement sur le serveur de fichiers. Par conséquent, je dois faire référence à l'hôte et au port et je ne peux pas utiliser de référence interne.

41
Ankur
ServletRequest.getServerName(...)
ServletRequest.getServerPort(...)
57
Everyone

L'objet ServletRequest qui a été transmis à votre méthode doGet ou doPost a des méthodes getServerName et getServerPort qui fournissent ces informations.

par exemple

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

@Tout le monde a une bonne réponse. Mais en prenant le schéma, le nom du serveur et le port, puis les fusionner. Il existe un moyen plus simple:

Vous pouvez utiliser HttpServletRequest.getRequestURL et HttpServletRequest.getRequestURI .

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String Host = url.substring(0, url.indexOf(uri)); //result
5
Amit G

J'ai trouvé dans mon ancien projet la chaîne:

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

c'est peut-être la solution?

3
user310791

Comme d'autres mentionnés ci-dessus, l'hôte et le port peuvent être récupérés sur demande. D'un autre côté, il est impossible pour le ServletContext de fournir les informations puisque Java ne connaissent pas votre environnement Host. Ie, une application avec le chemin de contexte "foo" (qui pourrait être récupéré par ServletContext #getContextPath ()) pourrait recevoir des demandes à la fois d'un port http 8080 et d'un port https 8043. Référence: https://web.archive.org/web/20120401225136/http://www.Java.net: 80/nœud/701934

3
Fang Zhen