The Method request.getRequestURI() returns URI with context path.
For example, if the base URL of an application is http://localhost:8080/myapp/
(i.e.
With Spring you can do:
String path = new UrlPathHelper().getPathWithinApplication(request);
A way to do this is to rest the servelet context path from request URI.
String p = request.getRequestURI();
String cp = getServletContext().getContextPath();
if (p.startsWith(cp)) {
String.err.println(p.substring(cp.length());
}
Read here .
If you use request.getPathInfo() inside a Filter, you always seem to get null (at least with jetty).
This terse invalid bug + response alludes to the issue I think:
https://issues.apache.org/bugzilla/show_bug.cgi?id=28323
I suspect it is related to the fact that filters run before the servlet gets the request. It may be a container bug, or expected behaviour that I haven't been able to identify.
The contextPath is available though, so fforws solution works even in filters. I don't like having to do it by hand, but the implementation is broken or
May be you can just use the split method to eliminate the '/myapp' for example:
string[] uris=request.getRequestURI().split("/");
string uri="/"+uri[1]+"/"+uris[2];
If you're inside a front contoller servlet which is mapped on a prefix pattern such as /foo/*
, then you can just use HttpServletRequest#getPathInfo().
String pathInfo = request.getPathInfo();
// ...
Assuming that the servlet in your example is mapped on /secure/*
, then this will return /users
which would be the information of sole interest inside a typical front controller servlet.
If the servlet is however mapped on a suffix pattern such as *.foo
(your URL examples however does not indicate that this is the case), or when you're actually inside a filter (when the to-be-invoked servlet is not necessarily determined yet, so getPathInfo()
could return null
), then your best bet is to substring the request URI yourself based on the context path's length using the usual String
method:
HttpServletRequest request = (HttpServletRequest) req;
String path = request.getRequestURI().substring(request.getContextPath().length());
// ...
request.getRequestURI().substring(request.getContextPath().length())