Java HttpServletRequest obtiene URL en la barra de URL de los navegadores

Así que estoy tratando de tomar la URL actual de la página utilizando el objeto de solicitud de Java. He estado utilizando request.getRequestURI () para preformar esto, pero me di cuenta de que cuando una clase java me redirecciona a una página diferente de una solicitud servlet getRequestURI da esa dirección en lugar de la URL original que se escribió en el navegador y que aún se muestra en el navegador.

Ej: \ AdvancedSearch:
getRequestURI() devuelve “\ subdir \ search \ search.jsp

Estoy buscando una forma de captar lo que el navegador ve como la URL y no lo que esa página sabe es solo un envoltorio de servlet.

Si su solicitud actual proviene de un “dentro del servidor de la aplicación” reenviar o incluir, se espera que el servidor de la aplicación preserve la información solicitada como atributos de solicitud. Los atributos específicos y lo que contienen dependen de si está haciendo un forward o un include.

Para , el URL padre original será devuelto por request.getRequestURL() , y la información sobre la página incluida se encontrará en los siguientes atributos de solicitud:

  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 

Para , la nueva URL será devuelta por request.getRequestURL() , y la información de la solicitud original se encontrará en los siguientes atributos de solicitud:

  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 

Estos se establecen en la sección 8.3 y 8.4 de la especificación Servlet 2.4.

Sin embargo, tenga en cuenta que esta información solo se conserva para las solicitudes enviadas internamente. Si tiene un servidor web front-end o un envío fuera del contenedor actual, estos valores serán nulos. En otras palabras, es posible que no tenga forma de encontrar la URL de solicitud original.

Acabo de hacer una ligera limpieza de la solución de 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(); } 

Las comprobaciones nulas se ejecutarán mucho más eficientemente que las comparaciones de cadenas.

 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 accede al formulario jsp, usando Expression Language

Puedes intentar esto

 <%=request.getRequestURL().toString()%> 

Para obtener la ruta HTTP solicitada sin conocer el estado del flujo interno de la solicitud, utilice este método:

 public String getUri(HttpServletRequest request) { String r = (String) request.getAttribute("javax.servlet.forward.request_uri"); return r == null ? request.getRequestURI() : r; }