9
votes

Java: Représentation des chaînes de l'hôte, Schéma, éventuellement port de la demande de servlet

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> xxx pré>

tel que VAL renvoie: p>

String absURL = request.getRequestURL();
URL url = new URL(absURL);

url.get????


2 commentaires

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.


5 Réponses :


0
votes

Je pense Java.net.uri fait ce que vous voulez.


0 commentaires

2
votes
URI u=new URI("http://www.google.com/");
String s=u.getScheme()+"://"+u.getHost()+":"+u.getPort();
As Cookie said, from java.net.URI (docs).

1 commentaires

Semble bien. Je pourrais utiliser ces fonctions avec l'objet de «demande» de servlet.



19
votes

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, "");


1 commentaires

Si le port est port 80, le représentant de la chaîne d'URL contient-il: 80 textes?



1
votes
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;
}

0 commentaires

0
votes

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);


2 commentaires

Je mets moins parce que j'ai vu ici regexp


Urlmatcher.Find () doit être effectué avant de pouvoir récupérer les groupes