3

我正在阅读文档,getRealPath(String s)当我阅读此声明时我感到困惑

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

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

4

2 回答 2

8

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

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

在此处输入图像描述

在此处输入图像描述

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

于 2013-05-05T16:10:32.580 回答
3

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

例如,在 eclipse 中,这通常是WebContent您的 Web 应用程序项目中的文件夹(可以自定义)。从项目中构建一个 WAR 文件后,您会意识到该WebContent文件夹​​消失了,因此在服务器上,输入字符串相对于 WAR 文件的文件夹(或 .war 库 - 这取决于您是否在部署与否)。

关于安全的说明

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

于 2012-09-21T08:04:28.073 回答