Je travaille avec différents serveurs et configurations. Quelle est la meilleure approche de code Java pour obtenir le schéma: // hôte: [port si ce n'est pas le port 80].
Voici un code que j'ai utilisé, mais je ne sais pas si c'est la meilleure approche. (Ceci est pseudo code) P>
Demande de httpServletQuest == p> tel que VAL renvoie: p> String absURL = request.getRequestURL();
URL url = new URL(absURL);
url.get????
5 Réponses :
URI u=new URI("http://www.google.com/"); String s=u.getScheme()+"://"+u.getHost()+":"+u.getPort(); As Cookie said, from java.net.URI (docs).
Semble bien. Je pourrais utiliser ces fonctions avec l'objet de «demande» de servlet.
Essayez ceci:
int port = request.getServerPort(); if (request.getScheme().equals("http") && port == 80) { port = -1; } else if (request.getScheme().equals("https") && port == 443) { port = -1; } URL serverURL = new URL(request.getScheme(), request.getServerName(), port, "");
Si le port est port 80, le représentant de la chaîne d'URL contient-il: 80 textes?
public String getServer(HttpServletRequest request) { int port = request.getServerPort(); StringBuilder result = new StringBuilder(); result.append(request.getScheme()) .append("://") .append(request.getServerName()); if (port != 80) { result.append(':') .append(port); } return result; }
Si vous souhaitez conserver l'URL tel qu'il est apparu dans la demande (par exemple, quittant le port s'il n'était pas explicitement donné), vous pouvez utiliser quelque chose comme ceci. La regex correspond aux URL HTTP et HTTPS. Le groupe de capture 1 contient la racine du serveur du schéma sur le port en option. (C'est celui que vous voulez.) Le groupe 2 contient uniquement le nom d'hôte.
String regex = "(^http[s]?://([\\w\\-_]+(?:\\.[\\w\\-_]+)*)(?:\\:[\\d]+)?).*$"; Matcher urlMatcher = Pattern.compile(regex).matcher(request.getRequestURL()); String serverRoot = urlMatcher.group(1);
Je mets moins parce que j'ai vu ici regexp
Urlmatcher.Find () doit être effectué avant de pouvoir récupérer les groupes
Stackoverflow.com/ Questions / 883136 / ... semble être une question très similaire.
C'est une question assez générique et je ne peux pas utiliser les libs Apache.