在 servlet 中获取请求 url 的一部分

Posted

技术标签:

【中文标题】在 servlet 中获取请求 url 的一部分【英文标题】:Getting part of request url inside servlet 【发布时间】:2013-05-06 06:32:26 【问题描述】:

我有一个使用/ev/* url-pattern 映射的EmailVerification Servlet。

http://example.com/ev/ce52320570

如何在我的 Servlet 中获取 URL 的 ce52320570 部分?

protected void doPost(HttpServletRequest request, HttpServletResponse response)
                                                     throws ServletException, IOException 
      String vid = "";  // Here I need to get the id from the URL

【问题讨论】:

如果你想要路径参数,你必须自己处理它们,基于HttpServletRequest 方法。如果您可以将它们替换为查询参数,一切都会变得更容易。 我已经发布了一个答案,它可能会更好,同时它只会返回最后一部分而不包含斜线...... @acdcjunior 我需要特别注意像http://xyz.com/ev/ce52320570/ 这样的url - 最后有一个额外的/。拆分和替换东西看起来有点额外的工作。你有什么更好的办法吗? From http://xyz.com/ev/ce52320570/, request.getPathInfo() 给你字符串/ce52320570/。如果您想消除"/"s,只需调用String#replace()String vid = request.getPathInfo().replace("/", "");。它会给你准确的ce52320570。这是独立于文件系统的。 【参考方案1】:

考虑映射到/ev/* 的Servlet(称为EmailVerification):

URL http://example.com/ev/ce52320570 会触发EmailVerification servlet 吗?

是的。在 Servlet 版本 2.5 和 3.0(可能更早)中,如果您使用 * 映射它,它将获得子路径,就像您所做的一样 /ev/*

我怎样才能得到这个 ce52320570 部分的 URL http://example.com/ev/ce52320570

request.getRequestURI() 会为您提供String 形式的请求 URL,例如 /ev/ce52320570

request.getPathInfo() 获取您(如果存在)/ev/ 之后的所有内容。

所以在对/ev/123 的请求中,getPathInfo() 会给你/123。同样,对/ev/some/othergetPathInfo() 的请求将给您/some/other

如果您需要 URL 的 查询参数 部分,则应使用

request.getQueryString()

请记住,getRequestURI()getPathInfo() 只为您提供请求的路径。如果需要获取查询参数,即?之后的参数,如/ev/something?query1=value1&other=123,只有request.getQueryString()会返回query1=value1&other=123部分。

request.getParameter(parameterName) 如果您需要特定查询参数的值。

如果是多值参数,则使用.getParameterValues()

请求here中的URL部分的更多示例。

【讨论】:

是他们的任何选择,除了在最后一个 / 之后拆分 /ev/ce52320570 以获取 ID 是的,request.getPathInfo() 获取(如果存在)/ev/ 之后的所有内容。 @acdcjunior 最后一部分request.getParameter(paramName)requedt.getQueryString() 更适用,因为它允许一次性获取发送的值。【参考方案2】:

使用request.getRequestURI() 并删除不需要的内容,即request.getRequestURI().replace("/ev/");

【讨论】:

以上是关于在 servlet 中获取请求 url 的一部分的主要内容,如果未能解决你的问题,请参考以下文章

请教高手,servlet中如何获取URL中的这种参数

获取请求发送者的 URL

在 servlet 过滤器中使用请求参数将 JSF ajax 请求重定向到 URL

servlet如何获取url传递的参数

从 servlet 读取整个 url

servlet如何获取url传递的参数