如何在没有上下文路径的情况下获取请求URI?

2022-08-31 07:52:05

Method request.getRequestURI() 返回带有上下文路径的 URI。

例如,如果应用程序的基 URL 是(即上下文路径是 myapp),并且我调用 ,它将返回 。http://localhost:8080/myapp/request.getRequestURI()http://localhost:8080/myapp/secure/users/myapp/secure/users

有没有办法只得到这部分,即没有上下文路径的URI?/secure/users


答案 1

如果你在一个前端的 contoller servlet 中,它被映射在前缀模式上,比如 ,那么你可以使用 HttpServletRequest#getPathInfo()/foo/*

String pathInfo = request.getPathInfo();
// ...

假设示例中的 servlet 映射在 上,那么这将返回典型的前端控制器 servlet 中唯一感兴趣的信息。/secure/*/users

但是,如果 servlet 映射在后缀模式上,例如(您的 URL 示例并不表示是这种情况),或者当您实际位于过滤器中时(当要调用的 servlet 尚未确定,因此可能会返回时),那么您最好的选择是使用常用方法根据上下文路径的长度自行对请求 URI 进行子字符串:*.foogetPathInfo()nullString

HttpServletRequest request = (HttpServletRequest) req;
String path = request.getRequestURI().substring(request.getContextPath().length());
// ...

答案 2
request.getRequestURI().substring(request.getContextPath().length())

推荐