spring获取请求url - spring路径参数




在Spring MVC中获取当前URL的最佳方法是什么? (4)

Java的URI类可以帮助你解决这个问题:

public static String getCurrentUrl(HttpServletRequest request){
    URL url = new URL(request.getRequestURL().toString());
    String host  = url.getHost();
    String userInfo = url.getUserInfo();
    String scheme = url.getProtocol();
    String port = url.getPort();
    String path = request.getAttribute("javax.servlet.forward.request_uri");
    String query = request.getAttribute("javax.servlet.forward.query_string");

    URI uri = new URI(scheme,userInfo,host,port,path,query,null)
    return uri.toString();
}

我想根据客户端为活动请求使用的URL创建URL。 有没有什么比采用当前的HttpServletRequest对象更聪明,它的getParameter...()方法重建完整的URL,包括(并且只)它的GET参数。

澄清:如果可能,我想退出使用HttpServletRequest对象。


在jsp文件中:

request.getAttribute("javax.servlet.forward.request_uri")

如果您需要URL到hostname而不是路径使用Apache的Common Lib StringUtil ,并从URL提取子字符串直到第三个indexOf /

public static String getURL(HttpServletRequest request){
   String fullURL = request.getRequestURL().toString();
   return fullURL.substring(0,StringUtils.ordinalIndexOf(fullURL, "/", 3)); 
}

示例:如果fullURLhttps://example.com/path/after/url/输出将为https://example.com


您可以使用ServletUriComponentsBuilder及其静态方法,而不是直接使用ServletUriComponentsBuilder

  • ServletUriComponentsBuilder.fromCurrentContextPath()
  • ServletUriComponentsBuilder.fromCurrentServletMapping()
  • ServletUriComponentsBuilder.fromCurrentRequestUri()
  • ServletUriComponentsBuilder.fromCurrentRequest()

他们使用了RequestContextHolder ,但使用UriComponentsBuilder的功能提供了额外的灵活性来构建新的URL。

例:

ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequestUri();
builder.scheme("https");
builder.replaceQueryParam("someBoolean", false);
URI newUri = builder.build().toUri();




httprequest