共计 3496 个字符,预计需要花费 9 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关 java 绝对路径及相对路径是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1. 基本概念的理解
绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL 和物理路径)例如:
C:xyz est.txt 代表了 test.txt 文件的绝对路径。
相对路径:相对与某个基准目录的路径。包含 Web 的相对路径(HTML 中的相对目录),例如:在
Servlet 中,/ 代表 Web 应用的跟目录。和物理路径的相对表示。例如:./ 代表当前目录, ../ 代表上级目录。这种类似的表示,也是属于相对路径。
RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,
2. 关于 JSP/Servlet 中的相对路径和绝对路径。
2.1 服务器端的地址
服务器端的相对地址指的是相对于你的 web 应用的地址,这个地址是在服务器端解析的(不同于 html 和 javascript 中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在 jsp 和 servlet 中的相对地址应该是相对于你的 web 应用。
其用到的地方有:
forward:servlet 中的 request.getRequestDispatcher(address); 这个 address 是在服务器端解析的,所以,你要 forward 到 a.jsp 应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个 / 相对于当前的 web 应用 webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。sendRedirect:在 jsp 中 %response.sendRedirect(/rtccp/user/a.jsp %
2.22、客户端的地址
所有的 html 页面中的相对地址都是相对于服务器根目录 (http://192.168.0.1/) 的,而不是 (跟目录下的该 Web 应用的目录) http://192.168.0.1/webapp/ 的。Html 中的 form 表单的 action 属性的地址应该是相对于服务器根目录(http://192.168.0.1/) 的,所以,如果提交到 a.jsp 为:action= /webapp/user/a.jsp 或 action= %=request.getContextPath()% /user/a.jsp;
提交到 servlet 为 actiom= /webapp/handleservlet Javascript 也是在客户端解析的,所以其相对路径和 form 表单一样。
因此,一般情况下,在 JSP/HTML 页面等引用的 CSS,Javascript.Action 等属性前面最好都加上
%=request.getContextPath()% , 以确保所引用的文件都属于 Web 应用中的目录。另外,应该尽量避免使用类似 . , ./ , ../../ 等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。
3. JSP/Servlet 中获得当前应用的相对路径和绝对路径
3.1 JSP 中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getRequestURI()
文件的绝对路径 :application.getRealPath(request.getRequestURI());
当前 web 应用的绝对路径 :application.getRealPath(/
取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()
3.2 Servlet 中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getServletPath();
文件的绝对路径 :request.getSession().getServletContext().getRealPath
(request.getRequestURI())
当前 web 应用的绝对路径 :servletConfig.getServletContext().getRealPath( /
(ServletContext 对象获得几种方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)
4.java 的 Class 中获得相对路径,绝对路径的方法
4.1 单独的 Java 类中获得绝对路径
根据 java.io.File 的 Doc 文挡,可知:
默认情况下 new File(/) 代表的目录为:System.getProperty(user.dir)。
一下程序获得执行类的当前路径
package org.cheng.file;
import java.io.File;
public class FileTest {
public static void main(String[] args) throws Exception {
System.out.println(Thread.currentThread().getContextClassLoader().getResource());
System.out.println(FileTest.class.getClassLoader().getResource());
System.out.println(ClassLoader.getSystemResource());
System.out.println(FileTest.class.getResource());
System.out.println(FileTest.class.getResource( /));
//Class 文件所在路径
System.out.println(new File( /).getAbsolutePath());
System.out.println(System.getProperty( user.dir));
}
}
4.2 服务器中的 Java 类获得当前路径(来自网络)
(1).Weblogic
WebApplication 的系统文件根目录是你的 weblogic 安装所在根目录。
例如:如果你的 weblogic 安装在 c:eaweblogic700…..
那么,你的文件根路径就是 c:.
所以,有两种方式能够让你访问你的服务器端的文件:
a. 使用绝对路径:
比如将你的参数文件放在 c:yourconfigyourconf.properties,
直接使用 new FileInputStream(yourconfig/yourconf.properties
b. 使用相对路径:
相对路径的根目录就是你的 webapplication 的根路径,即 WEB-INF 的上一级目录,将你的参数文件放
在 yourwebappyourconfigyourconf.properties,
这样使用:
new FileInputStream(./yourconfig/yourconf.properties
这两种方式均可,自己选择。
(2).Tomcat
在类中输出 System.getProperty(user.dir 显示的是 %Tomcat_Home%/bin
(3).Resin
不是你的 JSP 放的相对路径, 是 JSP 引擎执行这个 JSP 编译成 SERVLET
的路径为根. 比如用新建文件法测试 File f = new File(a.htm
这个 a.htm 在 resin 的安装目录下
(4). 如何读相对路径哪?
在 Java 文件中 getResource 或 getResourceAsStream 均可
例:getClass().getResourceAsStream(filePath);//filePath 可以是 /filename , 这里的 / 代表 web
发布根路径下 WEB-INF/classes
默认使用该方法的路径是:WEB-INF/classes。已经在 Tomcat 中测试。
5. 读取文件时的相对路径,避免硬编码和绝对路径的使用。
上述就是丸趣 TV 小编为大家分享的 java 绝对路径及相对路径是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。