问题
Methodrequest.getRequestURI()返回带有上下文路径的URI。
例如,如果应用程序的基本URL是http://localhost:8080/myapp/
(即上下文路径是myapp),并且我调用request.getRequestURI()
forhttp://localhost:8080/myapp/secure/users
,则它将返回/myapp/secure/users
。
有没有办法我们只能获得这个part/secure/users
,即没有上下文路径的URI?
#1 热门回答(134 赞)
如果你在一个映射在前缀模式上的前控制器servlet中,那么你可以使用HttpServletRequest#getPathInfo()
。
String pathInfo = request.getPathInfo();
// ...
假设你的示例中的servlet映射到/secure
,那么这将返回/users
,这将是典型前端控制器servlet中唯一感兴趣的信息。
但是,如果servlet映射到后缀模式(但是你的URL示例并不表示是这种情况),或者当你实际在一个过滤器内时(当尚未确定要调用的servlet时,sogetPathInfo()
可以returnnull
),那么你最好的办法是使用通常的String
方法根据上下文路径的长度自己对请求URI进行子串:
HttpServletRequest request = (HttpServletRequest) req;
String path = request.getRequestURI().substring(request.getContextPath().length());
// ...
#2 热门回答(62 赞)
request.getRequestURI().substring(request.getContextPath().length())
#3 热门回答(21 赞)
使用Spring,你可以:
String path = new UrlPathHelper().getPathWithinApplication(request);