Java的HttpServletRequest中获取浏览器的地址栏URL(Java HttpServ

2019-06-18 07:27发布

所以我想抓住使用Java的请求对象的页面的URL。 我一直在使用request.getRequestURI()瓶坯,但我注意到,当一个Java类,我重新路由到不同的页面关闭一个servlet请求getRequestURI给出了该地址,而不是到在浏览器中键入和原单网址这仍然显示在浏览器中。

例如:\填写AdvancedSearch:
getRequestURI()返回“\子目录\搜索\ search.jsp的”

我正在寻找一种方式来抓取浏览器看到的内容作为网址,并没有什么页知道只有一个servlet的包装。

Answer 1:

如果您当前的请求是从一个向前或包括“应用程序服务器内”,应用程序服务器预计为请求属性保存请求信息的到来。 具体的属性,它们包含什么,取决于你是否是一个向前或包括做。

对于<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。



Answer 2:

只是没有通过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();
}

空检查要超过字符串比较更有效地运行了很多。



Answer 3:

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;


Answer 4:

$ {requestScope [ 'javax.servlet.forward.query_string']} - 如果你访问它形成JSP,使用表达式语言



Answer 5:

你可以试试这个

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


Answer 6:

要获得HTTP请求的路径不知道请求的内部流动的状态,使用以下方法:

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


文章来源: Java HttpServletRequest get URL in browsers URL bar