我有一个HttpServletRequest对象。
我如何获得导致这个调用到达我的servlet的完整而准确的URL ?
或者至少尽可能准确,因为有些东西是可以重新生成的(也许是参数的顺序)。
我有一个HttpServletRequest对象。
我如何获得导致这个调用到达我的servlet的完整而准确的URL ?
或者至少尽可能准确,因为有些东西是可以重新生成的(也许是参数的顺序)。
当前回答
结合getRequestURL()和getQueryString()的结果应该会得到您想要的结果。
其他回答
// 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;
}
如果你使用了.getRequestURL()中的StringBuffer的构建器模式,你可以用三元写一个简单的一行代码:
private String getUrlWithQueryParms(final HttpServletRequest request) {
return request.getQueryString() == null ? request.getRequestURL().toString() :
request.getRequestURL().append("?").append(request.getQueryString()).toString();
}
但这只是语法糖。
在HttpServletRequest对象上使用以下方法
以getRequestURI () 返回该请求的URL部分,从协议名到HTTP请求第一行的查询字符串。
java.lang.StringBuffer getRequestURL () -重建客户端用来发出请求的URL。
以getQueryString () -返回包含在请求URL中路径后面的查询字符串。
结合getRequestURL()和getQueryString()的结果应该会得到您想要的结果。
在Spring项目中您可以使用
UriComponentsBuilder.fromHttpRequest(new ServletServerHttpRequest(request)).build().toUriString()