HttpServletRequest中getRequestURI和getPathInfo的区别

2025/04/07

1. 概述

在本快速教程中,我们将讨论HttpServletRequest类中getRequestURI()和getPathInfo()之间的区别。

2. getRequestURI()和getPathInfo()之间的区别

函数getRequestURI()返回完整的请求URI,这包括部署文件夹和Servlet映射字符串;它还将返回所有额外的路径信息。

getPathInfo()函数只返回传递给Servlet的路径,如果没有传递额外的路径信息,该函数将返回null。

换句话说,如果我们将应用程序部署在Web服务器的根目录中,并且请求映射到“/”的Servlet,则getRequestURI()和getPathInfo()都将返回相同的字符串。否则,我们将获得不同的值。

3. 示例请求

为了更好地理解HttpServletRequest方法,假设我们有一个可以通过以下URL访问的Servlet

http://localhost:8080/deploy-folder/servlet-mapping

此请求将命中部署在“deploy-folder”内的Web应用程序中的“Servlet-mapping” Servlet,因此,如果我们针对此请求调用getRequestURI()和getPathInfo(),它们将返回不同的字符串。

让我们创建一个简单的doGet() Servlet方法:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    PrintWriter writer = response.getWriter();
    if ("getPathInfo".equals(request.getParameter("function")) {
        writer.println(request.getPathInfo());
    } else if ("getRequestURI".equals(request.getParameter("function")) {
        writer.println(request.getRequestURI());
    }
    writer.flush();
}

首先,让我们看一下通过curl命令获取的getRequestURI请求的Servlet输出:

curl http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getRequestURI
/deploy-folder/servlet-mapping/request-path

类似地,让我们看一下getPathInfo的Servlet输出:

curl http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getPathInfo
/request-path

4. 总结

在本文中,我们解释了HttpServletRequest中getRequestURI()和getPathInfo()之间的区别,我们还通过示例Servlet和请求进行了演示。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章