httpservletrequest中的getRequeSturi和getPathinfo之间的区别
Contents
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