代码之家  ›  专栏  ›  技术社区  ›  Ballsacian1

在浏览器URL栏中获取URL的JavaHTTServServices请求

  •  24
  • Ballsacian1  · 技术社区  · 15 年前

    所以我试图用Java的请求对象来获取页面的当前URL。我已经使用了请求.GETRealesturi()来预处理这一点,但是我注意到,当Java类把我从servlet请求转到另一个页面时,GETRealestururi给出了这个地址,而不是在浏览器中键入的原始URL,它仍然在浏览器中显示。

    例如:高级搜索:
    getRequestURI() 返回“\subdir\search\search.jsp”

    我正在寻找一种方法来获取浏览器所看到的URL,而不是页面所知道的只是一个servlet包装器。

    6 回复  |  直到 9 年前
        1
  •  39
  •   kdgregory    15 年前

    如果当前请求来自“应用服务器内部”转发或包含,则应用服务器将保留请求信息作为请求属性。具体的属性,以及它们包含的内容,取决于您是执行转发操作还是执行包含操作。

    为了 <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
    

    这些在servlet 2.4规范第8.3节和第8.4节中列出。

    但是,请注意,此信息仅为内部调度的请求保留。如果您有一个前端Web服务器,或者在当前容器之外进行调度,那么这些值将为空。换句话说,您可能无法找到原始请求URL。

        2
  •  8
  •   readikus    12 年前

    只是稍微整理了一下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();
    }
    

    与字符串比较相比,空检查的运行效率要高得多。

        3
  •  5
  •   Ballsacian1    15 年前
    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;
    
        4
  •  4
  •   MihaiS    12 年前

    $requestScope['javax.servlet.forward.query_string'] --如果您使用表达式语言从JSP中访问它

        5
  •  1
  •   iCrazybest    9 年前

    你能试试这个吗

    <%=request.getRequestURL().toString()%>
    
        6
  •  1
  •   Daniel De León    9 年前

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

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