【问题标题】:Getting part of request url inside servlet在 servlet 中获取请求 url 的一部分
【发布时间】: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。这是独立于文件系统的。

标签: java jakarta-ee servlets httprequest url-pattern


【解决方案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/other、getPathInfo() 的请求将给您/some/other。

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

    request.getQueryString()。

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


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

【讨论】:

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

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

【讨论】:

    猜你喜欢
    • 2011-05-01
    • 2013-01-05
    • 2011-02-28
    • 1970-01-01
    • 2017-05-07
    • 2013-04-05
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多