J'essaie donc de saisir l'URL actuelle de la page à l'aide de l'objet de demande Java. J'ai utilisé request.getRequestURI () pour préformer ceci, mais j'ai remarqué que lorsqu'une classe Java me redirige vers une autre page d'une requête de servlet, getRequestURI donne cette adresse par opposition à la URL d'origine qui a été saisie dans le navigateur et qui s'affiche toujours dans le navigateur.
Ex:\AdvancedSearch:getRequestURI()
renvoie "\ subdir\search\search.jsp"
Je cherche un moyen de saisir ce que le navigateur considère comme l'URL et non ce que cette page sait n'est qu'un wrapper de servlet.
Si votre demande actuelle provient d'un transfert "à l'intérieur du serveur d'applications" ou d'inclusion, le serveur d'applications doit conserver les informations de demande en tant qu'attributs de demande. Les attributs spécifiques et ce qu'ils contiennent varient selon que vous effectuez un transfert ou une inclusion.
Pour <jsp:include>
, L'URL parent d'origine sera renvoyée par request.getRequestURL()
, et des informations sur la page incluse seront trouvées dans les attributs de requête suivants:
javax.servlet.include.request_uri
javax.servlet.include.context_path
javax.servlet.include.servlet_path
javax.servlet.include.path_info
javax.servlet.include.query_string
Pour <jsp:forward>
, La nouvelle URL sera renvoyée par request.getRequestURL()
, et les informations de la demande d'origine seront trouvées dans les attributs de demande suivants:
javax.servlet.forward.request_uri
javax.servlet.forward.context_path
javax.servlet.forward.servlet_path
javax.servlet.forward.path_info
javax.servlet.forward.query_string
Celles-ci sont décrites dans les sections 8.3 et 8.4 de la spécification Servlet 2.4.
Cependant, sachez que ces informations ne sont conservées que pour les demandes envoyées en interne. Si vous disposez d'un serveur Web frontal ou si vous effectuez une répartition en dehors du conteneur actuel, ces valeurs seront nulles. En d'autres termes, il se peut que vous n'ayez aucun moyen de trouver l'URL de demande d'origine.
Je viens de faire un peu de rangement de la solution par Ballsacian1
String currentURL = null;
if( request.getAttribute("javax.servlet.forward.request_uri") != null ){
currentURL = (String)request.getAttribute("javax.servlet.forward.request_uri");
}
if( currentURL != null && request.getAttribute("javax.servlet.include.query_string") != null ){
currentURL += "?" + request.getQueryString();
}
Les vérifications nulles vont s'exécuter beaucoup plus efficacement que les comparaisons de chaînes.
String activePage = "";
// using getAttribute allows us to get the orginal url out of the page when a forward has taken place.
String queryString = "?"+request.getAttribute("javax.servlet.forward.query_string");
String requestURI = ""+request.getAttribute("javax.servlet.forward.request_uri");
if(requestURI == "null") {
// using getAttribute allows us to get the orginal url out of the page when a include has taken place.
queryString = "?"+request.getAttribute("javax.servlet.include.query_string");
requestURI = ""+request.getAttribute("javax.servlet.include.request_uri");
}
if(requestURI == "null") {
queryString = "?"+request.getQueryString();
requestURI = request.getRequestURI();
}
if(queryString.equals("?null")) queryString = "";
activePage = requestURI+queryString;
$ {requestScope ['javax.servlet.forward.query_string']} - si vous y accédez depuis jsp, en utilisant le langage d'expression
Pour obtenir le chemin demandé HTTP sans connaître l'état du flux interne de la demande, utilisez cette méthode:
public String getUri(HttpServletRequest request) {
String r = (String) request.getAttribute("javax.servlet.forward.request_uri");
return r == null ? request.getRequestURI() : r;
}
Pouvez-vous essayer ceci
<%=request.getRequestURL().toString()%>
Même réponse que @kdgregory, mais vous pouvez plutôt utiliser les constantes Request Dispatcher.
javax.servlet.include.request_uri RequestDispatcher.FORWARD_REQUEST_URI
javax.servlet.include.context_path RequestDispatcher.FORWARD_CONTEXT_PATH
javax.servlet.include.servlet_path RequestDispatcher.FORWARD_SERVLET_PATH
javax.servlet.include.path_info RequestDispatcher.FORWARD_PATH_INFO
javax.servlet.include.query_string RequestDispatcher.FORWARD_QUERY_STRING