fly*_*ire 230 java servlets http
我有一个HttpServletRequest
对象.
如何获得导致此调用的完整且准确的URL到达我的servlet?
或者至少尽可能准确,因为可能存在可以重新生成的东西(可能是参数的顺序).
Boz*_*zho 360
将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();
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_* B. 132
我用这个方法:
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();
}
Run Code Online (Sandbox Code Playgroud)
Tej*_*eni 27
// http://hostname.com/mywebapp/servlet/MyServlet/a/b;c=123?d=789
public static String getUrl(HttpServletRequest req) {
String reqUrl = req.getRequestURL().toString();
String queryString = req.getQueryString(); // d=789
if (queryString != null) {
reqUrl += "?"+queryString;
}
return reqUrl;
}
Run Code Online (Sandbox Code Playgroud)
不推荐使用HttpUtil,这是正确的方法
StringBuffer url = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString != null) {
url.append('?');
url.append(queryString);
}
String requestURL = url.toString();
Run Code Online (Sandbox Code Playgroud)
在Spring项目中,您可以使用
UriComponentsBuilder.fromHttpRequest(new ServletServerHttpRequest(request)).build().toUriString()
Run Code Online (Sandbox Code Playgroud)