我有一个 HttpServletRequest
对象。
我如何获得导致此调用到达我的 servlet 的完整且准确的 URL?
或者至少尽可能准确,因为也许有些东西可以重新生成(也许是参数的顺序)。
原文由 flybywire 发布,翻译遵循 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 许可协议
4 回答1.6k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答2k 阅读
2 回答785 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
HttpServletRequest
有以下方法:getRequestURL()
- 返回查询字符串分隔符之前的完整 URL 部分?
getQueryString()
- 返回查询字符串分隔符后的完整 URL 部分?
因此,要获取完整的 URL,只需执行以下操作: