À partir de l'URL suivante, je dois obtenir (http://localhost:9090/dts)
seul.
C'est-à-dire que je dois supprimer (documents/savedoc)
(OU)
besoin d'obtenir seulement - (http://localhost:9090/dts)
http://localhost:9090/dts/documents/savedoc
Y a-t-il une méthode disponible dans la demande pour obtenir ce qui précède?
J'ai essayé ce qui suit et j'ai obtenu le résultat. Mais toujours en train d'essayer.
System.out.println("URL****************"+request.getRequestURL().toString());
System.out.println("URI****************"+request.getRequestURI().toString());
System.out.println("ContextPath****************"+request.getContextPath().toString());
URL****************http://localhost:9090/dts/documents/savedoc
URI****************/dts/documents/savedoc
ContextPath****************/dts
Quelqu'un peut-il m'aider à résoudre ce problème?
AFAIK pour cela, il n'y a pas de méthode fournie par l'API, besoin de personnalisation.
String serverName = request.getServerName();
int portNumber = request.getServerPort();
String contextPath = request.getContextPath();
// essaye ça
System.out.println(serverName + ":" +portNumber + contextPath );
Vous dites que vous voulez obtenir exactement:
http://localhost:9090/dts
Dans votre cas, la chaîne ci-dessus se compose de:
1) schéma : http
2) serveur Nom d'hôte: localhost
3) serveur port: 9090
4) ( chemin de contexte : dts
(Vous trouverez plus d'informations sur les éléments d'un chemin de demande dans le manuel officiel Oracle Tutoriel Java EE: Obtention d'informations à partir des demandes )
String scheme = request.getScheme();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String contextPath = request.getContextPath(); // includes leading forward slash
String resultPath = scheme + "://" + serverName + ":" + serverPort + contextPath;
System.out.println("Result path: " + resultPath);
String scheme = request.getScheme();
String Host = request.getHeader("Host"); // includes server name and server port
String contextPath = request.getContextPath(); // includes leading forward slash
String resultPath = scheme + "://" + Host + contextPath;
System.out.println("Result path: " + resultPath);
Les deux variantes vous donneront ce que vous vouliez: http://localhost:9090/dts
Bien sûr, il existe d'autres variantes, comme d'autres l'ont déjà écrit ...
C'est juste dans votre question initiale que vous avez demandé comment obtenir http://localhost:9090/dts
, c'est-à-dire que vous voulez que votre chemin d'accès inclue le schéma .
Si vous n'avez toujours pas besoin d'un schéma, la méthode la plus rapide est la suivante:
String resultPath = request.getHeader("Host") + request.getContextPath();
Et vous obtiendrez (dans votre cas): localhost:9090/dts
Supprimez simplement l'URI de l'URL, puis ajoutez-y le chemin de contexte. Pas besoin de manipuler des schémas et des ports lâches, ce qui n'est que plus fastidieux lorsque vous traitez avec le port par défaut 80
qui n'a pas du tout besoin d'apparaître dans l'URL.
StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();
String ctx = request.getContextPath();
String base = url.substring(0, url.length() - uri.length() + ctx.length());
// ...
À ma connaissance, vous avez uniquement besoin de la partie domaine et du chemin de contexte. Sur la base de cette compréhension, vous pouvez utiliser cette méthode pour obtenir la chaîne requise.
String domain = request.getRequestURL().toString();
String cpath = request.getContextPath().toString();
String tString = domain.subString(0, domain.indexOf(cpath));
tString = tString + cpath;