Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java HttpServletRequest get URL in browsers URL bar

Tags:

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.

like image 997
Ballsacian1 Avatar asked Aug 10 '09 18:08

Ballsacian1


People also ask

How do I get the URL from the search bar?

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.

How do I get URI from my browser?

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.


2 Answers

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.

like image 107
kdgregory Avatar answered Oct 28 '22 23:10

kdgregory


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.

like image 26
readikus Avatar answered Oct 28 '22 23:10

readikus