在 HttpServletRequest
中,getRequestURI()
和 getServletPath()
这两个方法都与请求的路径信息相关,但它们返回的内容存在一些区别
1. getRequestURI()
方法
- 定义:
getRequestURI()
方法返回的是客户端请求的完整 URI(统一资源标识符)中,从协议和主机名之后到查询字符串之前的部分。它包含了上下文路径和 Servlet 路径,甚至可能包含额外的路径信息。 - 示例:假设客户端的请求 URL 是
http://example.com/app/someServlet/pathInfo?param=value
,其中http://example.com
是协议和主机名,/app
是上下文路径,/someServlet
是 Servlet 路径,/pathInfo
是额外的路径信息,?param=value
是查询字符串。那么getRequestURI()
方法将返回/app/someServlet/pathInfo
。 - 代码示例:
收起
java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
response.getWriter().println("Request URI: " + uri);
}
}
2. getServletPath()
方法
- 定义:
getServletPath()
方法返回的是请求中对应 Servlet 的路径部分,不包含上下文路径和额外的路径信息。它表示的是客户端请求的 URL 中用于映射到具体 Servlet 的那一部分。 - 示例:对于请求 URL
http://example.com/app/someServlet/pathInfo?param=value
,getServletPath()
方法将返回/someServlet
。 - 代码示例:
收起
java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String servletPath = request.getServletPath();
response.getWriter().println("Servlet Path: " + servletPath);
}
}
3. 区别总结
- 包含内容:
getRequestURI()
返回的路径包含上下文路径、Servlet 路径和可能存在的额外路径信息。getServletPath()
只返回映射到具体 Servlet 的路径部分,不包含上下文路径和额外路径信息。
- 用途:
getRequestURI()
常用于获取完整的请求路径,例如在日志记录、权限验证等场景中,需要知道客户端请求的完整路径信息。getServletPath()
主要用于确定请求具体映射到哪个 Servlet,在 Servlet 内部处理请求时,可能会根据 Servlet 路径来执行不同的业务逻辑。
4. 其他相关方法
getContextPath()
:返回请求的上下文路径,即应用程序部署的根路径,例如/app
。getPathInfo()
:返回请求中除上下文路径和 Servlet 路径之外的额外路径信息,例如/pathInfo
。