在 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
部分的 URLhttp://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)
如果您需要特定查询参数的值。
.getParameterValues()
请求here中的URL部分的更多示例。
【讨论】:
是他们的任何选择,除了在最后一个/
之后拆分 /ev/ce52320570
以获取 ID
是的,request.getPathInfo()
获取(如果存在)/ev/
之后的所有内容。
@acdcjunior 最后一部分request.getParameter(paramName)
比requedt.getQueryString()
更适用,因为它允许一次性获取发送的值。【参考方案2】:
使用request.getRequestURI()
并删除不需要的内容,即request.getRequestURI().replace("/ev/");
【讨论】:
以上是关于在 servlet 中获取请求 url 的一部分的主要内容,如果未能解决你的问题,请参考以下文章