ServletContext getRealPath方法 – 什么是虚拟路径?

我正在阅读getRealPath(String s)的文档,当我读到这个语句时,我感到很困惑

返回包含给定虚拟路径的实际路径的String。 例如,路径/index.html返回服务器文件系统上的绝对文件路径,该请求由http://host/contextPath/index.html ,其中contextPath是此ServletContext的上下文路径。

什么是虚拟路径? 假设我在我的部署环境中,当我说getRealPath(“index.html”)这通常指向WEB-INF目录时? 或者getRealPath()是否开始读取根目录(在Web应用程序的文件夹名称内)?

ServletContext.getRealPath(String s)返回实际文件系统路径。 输入字符串相对于Web应用程序的上下文路径进行解释。

在例如eclipse中,这通常是Web应用程序项目中的WebContent文件夹(可以自定义)。 在从项目中构建WAR文件之后,您将意识到WebContent文件夹消失了,因此在服务器上输入字符串相对于WAR文件的文件夹(或.war库)进行解释 – 这取决于您是否爆炸WAR在部署期间或不)。

关于安全的说明

应该(不必)仅在您要访问服务器端的文件时使用此方法。 典型情况是在启动期间解析配置文件。 请记住,永远不要让应用程序的调用者知道给定资源的真实文件系统路径。

您从Web容器中访问的资源的路径都是虚拟路径 。 它们的虚拟根是Web应用程序的基本文件夹。 但是在它们所在的实际操作系统中,它们肯定会处于“具体”位置。 getRealPath为您提供该路径。

假设你有一个名为index.jsp的jsp:

在此处输入图像描述

在此处输入图像描述

请注意,无论何时使用此function,都会对Web应用程序的可移植性造成破坏。