首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Spring MVC中获取当前URL的最佳方法是什么?

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

Stack Overflow用户
提问于 2009-09-29 06:08:44
回答 7查看 191.5K关注 0票数 113

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-29 06:58:25

有两种方法可以更容易地访问这些数据,但该接口不提供通过一次调用获取整个URL的可能性。您必须手动构建它:

public static String makeUrl(HttpServletRequest request)
{
    return request.getRequestURL().toString() + "?" + request.getQueryString();
}

我不知道如何使用Spring MVC工具来做到这一点。

如果您希望访问当前请求而不将其传递到任何地方,则必须在web.xml中添加一个侦听器:

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

然后使用此命令获取绑定到当前Thread的请求:

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
票数 125
EN

Stack Overflow用户

发布于 2017-03-07 21:58:21

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

  • 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();
票数 100
EN

Stack Overflow用户

发布于 2015-04-13 16:51:18

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();
}
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1490821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档