HttpServletRequest to complete URL
我有一个对象。HttpServletRequest
如何获取导致此调用到达我的 servlet 的完整且准确的 URL?
或者至少尽可能准确地说,因为也许有些东西可以再生(也许是参数的顺序)。
我有一个对象。HttpServletRequest
如何获取导致此调用到达我的 servlet 的完整且准确的 URL?
或者至少尽可能准确地说,因为也许有些东西可以再生(也许是参数的顺序)。
HttpServletRequest
具有以下方法:
getRequestURL()
- 返回查询字符串分隔符字符之前的完整 URL 部分?
getQueryString()
- 返回查询字符串分隔符字符后的完整 URL 部分?
因此,要获取完整的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();
}
}
我使用这种方法:
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();
}