HttpServletRequest 完成 URL

新手上路,请多包涵

我有一个 HttpServletRequest 对象。

我如何获得导致此调用到达我的 servlet 的完整且准确的 URL?

或者至少尽可能准确,因为也许有些东西可以重新生成(也许是参数的顺序)。

原文由 flybywire 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 694
2 个回答

HttpServletRequest 有以下方法:

因此,要获取完整的 URL,只需执行以下操作:

 public static String getFullURL(HttpServletRequest request) {
    StringBuilder requestURL = new StringBuilder(request.getRequestURL().toString());
    String queryString = request.getQueryString();

    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
}

原文由 Bozho 发布,翻译遵循 CC BY-SA 4.0 许可协议

我用这个方法:

 public static String getURL(HttpServletRequest req) {

    String scheme = req.getScheme();             // http
    String serverName = req.getServerName();     // hostname.com
    int serverPort = req.getServerPort();        // 80
    String contextPath = req.getContextPath();   // /mywebapp
    String servletPath = req.getServletPath();   // /servlet/MyServlet
    String pathInfo = req.getPathInfo();         // /a/b;c=123
    String queryString = req.getQueryString();          // d=789

    // Reconstruct original requesting URL
    StringBuilder url = new StringBuilder();
    url.append(scheme).append("://").append(serverName);

    if (serverPort != 80 && serverPort != 443) {
        url.append(":").append(serverPort);
    }

    url.append(contextPath).append(servletPath);

    if (pathInfo != null) {
        url.append(pathInfo);
    }
    if (queryString != null) {
        url.append("?").append(queryString);
    }
    return url.toString();
}

原文由 MatBanik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题