request.getSession().getServletContext().getRealPath("upload/" ); 获取不到 tomcat 服务器目录

本文介绍了一次在Tomcat中部署Servlet时遇到的路径配置问题,详细解释了如何正确设置以确保应用程序能够从预期的位置读取文件。

今天恰好有个上传文件的练习需要使用 request.getSession().getServletContext().getRealPath("upload/" ); 获取上传到服务器上的文件路径 C:\\apache-tomcat-7.0.47\\webapps\\CommonhelloWorldServlet \\upload 的目录,结果获取到的是 D:\eclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\CommonhelloWorldServlet ,并不是运行时的工程存放目录,得到的反而是工作空间的项目存放路径,我觉得应该是配置的问题,经过百度之后,果然得出猜想没错,步骤如下:

1、先在编辑器界面将现有 servlet 删除,再双击旋转 tomcat 7.0 版本新建 servlet,结果如下图:


发现配置如下图,解释了为啥获取到工作空间的路径了:


修改如下:


运行代码,效果如下,正常了:



<think>我们正在处理一个关于如何获取文件绝对路径的问题。用户想获取D盘中图片的绝对路径,并询问如何使用getRealPath函数。但是,请注意,getRealPath通常用于Web应用程序中获取服务器上的路径,而不是本地文件系统(如D盘)的路径。因此,我们需要澄清这一点。 根据引用[1]:`getRealPath`是Servlet API中的方法,用于获取Web应用程序中某个资源在服务器文件系统上的真实路径。例如: ```java String realPath = request.getSession().getServletContext().getRealPath("/"); ``` 这将返回Web应用程序根目录服务器上的真实路径。 但是,用户想要获取的是本地D盘上的图片路径,这通常不在Web应用程序的部署目录中。因此,我们不能使用`getRealPath`来获取D盘的路径。 对于本地文件系统,我们直接使用文件路径即可。例如,D盘上的图片路径可以直接写成: ```java String imagePath = "D:/图片文件名.jpg"; // 或者 "D:\\图片文件名.jpg" ``` 如果用户是在Web应用程序中,并且希望将D盘上的图片提供给Web访问,那么需要将D盘的某个目录映射为Web应用程序的虚拟路径(这需要在服务器配置中设置),然后才能通过Web访问。但用户的问题似乎只是获取绝对路径。 因此,我们有两种情况: 1. 如果用户只是需要在Java程序中操作D盘的文件,直接使用绝对路径字符串即可。 2. 如果用户是在Web应用程序中,并且图片位于Web应用程序内部(例如在Web应用程序的目录下),那么可以使用`getRealPath`来获取路径。 但是,根据用户的问题,他明确提到D盘,所以很可能不是Web应用程序内部的路径。 **步骤:** 1. 确认环境:用户是在编写Web应用还是普通的Java应用? - 如果是Web应用,并且图片在Web应用目录内(比如在WebContent或resources目录下),那么可以使用`getRealPath`。 - 如果是普通Java应用,或者图片在Web应用目录之外(如D盘根目录或某个独立目录),则直接使用绝对路径。 2. 由于用户提到“getrealpath函数”,我们假设他是在Web应用环境中,并且可能误解了该函数的用途。 **解决方案:** - 如果用户想要获取D盘上图片的绝对路径,直接使用绝对路径字符串即可,不需要`getRealPath`。 - 如果用户希望将D盘上的图片通过Web应用提供,那么需要配置服务器(如Tomcat)将D盘的某个目录设置为虚拟目录,然后通过相对URL访问。 **示例代码(直接使用绝对路径):** ```java // 假设图片在D盘的images目录下,文件名为example.jpg String imagePath = "D:/images/example.jpg"; File imageFile = new File(imagePath); if (imageFile.exists()) { // 文件存在,进行后续操作 } else { // 文件不存在 } ``` **如果用户确实在Web应用中,并且图片位于Web应用内部:** 假设图片放在Web应用的`/upload`目录下,那么可以这样获取真实路径: ```java String contextPath = request.getSession().getServletContext().getRealPath("/upload"); // 然后拼接文件名 String imagePath = contextPath + File.separator + "example.jpg"; ``` 但是,用户明确提到D盘,所以很可能不是这种情况。 **结论:** 用户应该直接使用绝对路径来表示D盘上的文件。 **相关问题:** 根据用户的问题,我们生成以下相关问题: §§相关问题§§ 1. 如何在Java中读取D盘上的文件? 2. 如何在Web应用程序中访问服务器本地文件系统上的文件? 3. 如何配置Tomcat虚拟目录以访问D盘上的图片? 4. Java中如何获取文件的绝对路径?</think>### 获取D盘图片绝对路径的方法 在Java中获取本地文件系统(如D盘)的绝对路径,**不能直接使用`getRealPath()`方法**,因为`getRealPath()`是Servlet API中用于获取Web应用部署路径的方法(如引用[1]所示),仅适用于服务器环境。对于本地文件操作,应使用Java标准库的`File`类。 #### 正确方法(普通Java程序) ```java import java.io.File; public class GetImagePath { public static void main(String[] args) { // 直接指定D盘文件路径 File imageFile = new File("D:/images/photo.jpg"); // 获取绝对路径 String absolutePath = imageFile.getAbsolutePath(); System.out.println("图片绝对路径: " + absolutePath); } } ``` #### 特殊场景:Web应用中访问D盘文件 如果需要在Web应用中访问D盘文件(不推荐,存在安全隐患),需额外配置: ```java // 在Servlet中获取D盘路径(不推荐) String dDrivePath = "D:/images/photo.jpg"; File imageFile = new File(dDrivePath); String absolutePath = imageFile.getAbsolutePath(); ``` > **注意**:Web应用直接访问本地磁盘需修改服务器权限策略,且违反安全最佳实践[^1][^4]。 #### 关键说明 1. `getRealPath()`仅适用于Web应用内部资源(如`/WEB-INF/`目录) 2. 本地文件操作使用`java.io.File`类 3. 路径格式: - Windows: `"D:/folder/file.jpg"` 或 `"D:\\folder\\file.jpg"` - Linux/Mac: `"/mnt/d/folder/file.jpg"` #### 安全建议 1. 避免Web应用直接访问本地磁盘 2. 若必须访问,应将文件放在Web应用目录内(如`/upload`),通过`getRealPath("/upload")`获取路径[^1][^4] 3. 数据库只存储相对路径(如`/upload/photo.jpg`),而非绝对路径[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值