So I'm trying to grab the current URL of the page using Java's request object. I've been using request.getRequestURI() to preform this, but I noticed that when a java class reroutes me to a different page off a servlet request getRequestURI gives that that address as opposed to the orginal URL that was typed in the browser and which still shows in the browser.
Ex: \AdvancedSearch:getRequestURI()
returns "\subdir\search\search.jsp"
I'm looking for a way to grab what the browser sees as the URL and not what that page knows is only a servlet wrapper.
Get a page URLIn search results, click the title of the page. At the top of your browser, click the address bar to select the entire URL. Copy.
Answer: Use the window. location. href Property location. href property to get the entire URL of the current page which includes host name, query string, fragment identifier, etc. The following example will display the current url of the page on click of the button.
If your current request is coming from an "inside the app-server" forward or include, the app-server is expected to preserve request information as request attributes. The specific attributes, and what they contain, depends on whether you're doing a forward or an include.
For <jsp:include>
, the original parent URL will be returned by request.getRequestURL()
, and information about the included page will be found in the following request attributes:
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
For <jsp:forward>
, the new URL will be returned by request.getRequestURL()
, and the original request's information will be found in the following request attributes:
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
These are set out in section 8.3 and 8.4 of the Servlet 2.4 specification.
However, be aware that this information is only preserved for internally-dispatched requests. If you have a front-end web-server, or dispatch outside of the current container, these values will be null. In other words, you may have no way to find the original request URL.
Just did a slight tidy of the solution by 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(); }
The null checks are going to run a lot more efficiently than String comparisons.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With