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. the context path is myapp), and I call request.getRequestURI()
for http://localhost:8080/myapp/secure/users
, it will return /myapp/secure/users
.
Is there any way we can get only this part /secure/users
, i.e. the URI without context path?
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
request.getRequestURI().substring(request.getContextPath().length())
getPathInfo() sometimes return null. In documentation HttpServletRequest
This method returns null if there was no extra path information.
I need get path to file without context path in Filter and getPathInfo() return me null. So I use another method: httpRequest.getServletPath()
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String newPath = parsePathToFile(httpRequest.getServletPath());
...
}
With Spring you can do:
String path = new UrlPathHelper().getPathWithinApplication(request);
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];
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 .
Source: Stackoverflow.com