Contents

httpservletrequest中的getRequeSturi和getPathinfo之间的区别

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