问题
I have an EmailVerification
Servlet mapped with /ev/*
url-pattern.
http://example.com/ev/ce52320570
How can I get this ce52320570
part of the URL in my Servlet?
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String vid = ""; // Here I need to get the id from the URL
}
回答1:
Considering a Servlet (called EmailVerification
) mapped to /ev/*
:
Will the URL
http://example.com/ev/ce52320570
trigger theEmailVerification
servlet ?
Yes. In Servlet versions 2.5 and 3.0 (maybe earlier), it'll get the subpath if you map it with *
, like /ev/*
, as you did.
How can I get this
ce52320570
part of the URLhttp://example.com/ev/ce52320570
?
request.getRequestURI() will get you the requested URL as a
String
, like/ev/ce52320570
.request.getPathInfo() gets you (if exists) everything after
/ev/
.- So in a request to
/ev/123
,getPathInfo()
would give you/123
. The same way, a request to/ev/some/other
,getPathInfo()
would give you/some/other
.
- So in a request to
request.getQueryString() should be used if you need the query parameters part of the URL.
- Keep in mind both
getRequestURI()
andgetPathInfo()
give you only the path requested. If you need to obtain the query parameters, that is, those after the?
, like/ev/something?query1=value1&other=123
, onlyrequest.getQueryString()
would return thequery1=value1&other=123
part.
- Keep in mind both
request.getParameter(parameterName) if you need the value of a specific query parameter.
- Resort to .getParameterValues() if it is a multivalued parameter
More examples of the URL parts in the request here.
回答2:
Use request.getRequestURI()
and remove what you don't need, i.e. request.getRequestURI().replace("/ev/");
来源:https://stackoverflow.com/questions/16501478/getting-part-of-request-url-inside-servlet