欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

路径问题

程序员文章站 2022-03-02 22:41:14
...

绝对路径:如:D:\web\file.tex

优点:不论当前在任何文件夹下,使用绝对路径,都可以找到对应文件
缺点:如果当前环境改变,绝对路径可能会失效

相对路径

优点:不论当前是什么操作系统,不论硬盘的结构如何,只要2个文件相对的位置不变,就可以找到对应的文件
缺点:文件位置一旦改变,就找不到了
在web应用当中,由于存在请求转发的情况,会改变当前文件的父目录

例如:

regist.jsp的父目录为:WebRoot
/servlet/RegistServlet转发请求给regist.jsp之后的父目录为:WebRoot/servlet
因此使用绝对路径比相对路径更安全

在web环境中读取资源时,如果写的是相对路径,则在tomcat/bin目录下寻找资源。如果写的是绝对路径,则在tomcat所在的根目录下寻找资源。如果写的是盘符开始的绝对路径,可以正确找到资源,但是一旦改变了发布环境,路径很可能是错的,所以提供以下两种方法,用来获取资源的绝对路径

1.ServletContext读取资源

//这个资源从WebRoot的根路径开始找
ServletContext.getRealPath("/WEB-INF/classes/config.xml");

2.类加载器读取资源

如果当前程序中没有ServletContext可以用,此时可以拜托类加载器帮我们加载资源:
类加载器可以加载.class文件,同样也可以加载其他类型的资源文件
在ClassLoader上提供了getResource("相对于类加载目录的路径")可以加载资源,但是要求这个路径给一个相对于类加载器加载类的目录的路径(WEB-INF/classes)。

// ClassLoader->类加载器 还可以加载资源
ClassLoader loader=ServletContextDemo3.class.getClassLoader();
// getResource可以通过给定的名字获取一个资源(图片,音频,文本等)
// getResource方法会直接去classpath下寻找资源
// classpath对于java应用是 bin目录
// classpath对于web应用 WEB-INF/classes
String path=loader.getResource("config.xml").getPath();
System.out.println("path="+path);

 

 

相关标签: JavaWeb