所以我试图使用Java的请求对象获取页面的当前URL。我一直在使用request.getRequestURI()来预先形成这个,但是我注意到当一个java类将我重新路由到servlet请求的另一个页面时,getRequestURI给出了该地址而不是在浏览器中键入的原始URL仍然在浏览器中显示。
Ex:\ AdvancedSearch:
getRequestURI()
返回“\ subdir \ search \ search.jsp”
我正在寻找一种方法来获取浏览器看到的URL,而不是该页面知道的只是一个servlet包装器。
答案 0 :(得分:40)
如果您当前的请求来自“app-server内部”转发或包含,则app-server应将请求信息保留为请求属性。具体属性及其包含的内容取决于您是在进行转发还是包含。
对于<jsp:include>
,原始父网址将由request.getRequestURL()
返回,有关所包含网页的信息将在以下请求属性中找到:
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
对于<jsp:forward>
,新网址将由request.getRequestURL()
返回,原始请求的信息将在以下请求属性中找到:
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
这些内容在Servlet 2.4规范的8.3和8.4节中列出。
但请注意,此信息仅针对内部分派的请求保留。如果您有一个前端Web服务器,或者在当前容器之外调度,则这些值将为null。换句话说,您可能无法找到原始请求网址。
答案 1 :(得分:8)
刚刚对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();
}
null检查将比String比较更有效地运行。
答案 2 :(得分:5)
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;
答案 3 :(得分:4)
$ {requestScope [&#39; javax.servlet.forward.query_string&#39;]} - 如果您使用表达式语言
从jsp访问它答案 4 :(得分:1)
你能试试吗
<%=request.getRequestURL().toString()%>
答案 5 :(得分:1)
要获取HTTP请求的路径而不知道请求内部流的状态,请使用以下方法:
public String getUri(HttpServletRequest request) {
String r = (String) request.getAttribute("javax.servlet.forward.request_uri");
return r == null ? request.getRequestURI() : r;
}
答案 6 :(得分:0)
答案与@kdgregory相同,但是您可以使用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