所以我想抓住使用Java的请求对象的页面的URL。 我一直在使用request.getRequestURI()瓶坯,但我注意到,当一个Java类,我重新路由到不同的页面关闭一个servlet请求getRequestURI给出了该地址,而不是到在浏览器中键入和原单网址这仍然显示在浏览器中。
例如:\填写AdvancedSearch:
getRequestURI()
返回“\子目录\搜索\ search.jsp的”
我正在寻找一种方式来抓取浏览器看到的内容作为网址,并没有什么页知道只有一个servlet的包装。
如果您当前的请求是从一个向前或包括“应用程序服务器内”,应用程序服务器预计为请求属性保存请求信息的到来。 具体的属性,它们包含什么,取决于你是否是一个向前或包括做。
对于<jsp:include>
,原来的父代URL将由返回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>
,新的URL将被返回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
这些载于8.3节和Servlet 2.4规范的8.4。
但是,请注意,此信息只保存在内部分派请求。 如果你有一个前端web服务器,或派遣当前容器外,这些值将是无效的。 换句话说,你可能没有办法找到原始请求URL。
只是没有通过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();
}
空检查要超过字符串比较更有效地运行了很多。
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']} - 如果你访问它形成JSP,使用表达式语言
你可以试试这个
<%=request.getRequestURL().toString()%>
要获得HTTP请求的路径不知道请求的内部流动的状态,使用以下方法:
public String getUri(HttpServletRequest request) {
String r = (String) request.getAttribute("javax.servlet.forward.request_uri");
return r == null ? request.getRequestURI() : r;
}