Java的绝对路径和相对路径

参考:http://blog.csdn.net/u011225629/article/details/46872775

1. 绝对路径

以根部件开始的路径是绝对路径,比如/(Linux系统中)或者C:\(Windows系统中)。

默认文件系统的路径分隔符,类Unix文件系统是/,Windows是\

其实就是在硬盘上真正的路径,(URL和物理路径)例如:

C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。

2. 相对路径

相对路径:相对于某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,”/”代表Web应用的根目录,”./” 代表当前目录,“../”代表上级目录。

3. java中的应用

归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是API在底层帮助我们构建了绝对路径,从而找到资源的!

3.1 request.getContextPath()

<%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径或者叫根目录,分为两种情况:

  1. 将web项目中的webRoot下的文件直接拷贝到webapps/ROOT下(删除ROOT下的原有文件);
  2. 在Tomcat下的webapps中创建以项目名称命名(当然也可以用其他的名称)的文件夹,并将webRoot下的文件直接拷贝到该文件夹下。

    对于第一部署方法,request.getContextPath()的返回值为空(即:"",中间无空格,注意区分null)。

    对于第二部署方法,其返回值为:/创建的文件夹的名称。

对于第1种方法,当你直接在浏览器中输入你的服务器ip+端口号,就会到你的jsp页面,而不是tomcat的默认页面,所以你通过request.getContextPath()得到的字符串是为空字符串;

如果你想得到工程文件的实际物理路径,可通过:<%=request.getRealPath("/")%>。

效果:

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

path: /jspSmartUpLoad

basePath: http://yangm1203.oicp.net:8080/jspSmartUpLoad/

request.getScheme(): http

request.getServerName(): yangm1203.oicp.net

request.getServerPort(): 8080

实际应用中,一般用来解决jsp测试和生产环境路径不同的问题

request.getScheme();

返回的协议名称,默认是http。对于ssl则返回"https"

request.getServerName()

返回的是服务器域名,如果是在本地的话就是localhost

getServerPort()

获取服务器端口号

比如<a href="<%=request.getContextPath()%>/catalog.jsp">,但当这两个文件是在同一个目录下时,也可以直接用<a href="catalog.jsp">

比如你要生成一个文件放在服务器上的一个目录下,可以使用request.getContextPath()+/dir,组成一个完整得目录结构!

注意在velocity中的写法可能要改为

$!{request.getContextPath()}

一些常用的获取项目根目录写法:

在jsp里去<%=request.getContextPath()%>这就是项目的根路径了。
js的引入方法如下:
<script src="<%=request.getContextPath() %> /home/test.js"></script>
css的引入方法:
<link href="<%=request.getContextPath() %>/css/one.css" rel="stylesheet" type="text/css">

3.2 Classpath:

指定类搜索路径。即用来告诉编译器导入的包或者类所在路径。

比如我们安装JDK的配置:

Classpath:

.;%JAVA_HOME%\lib;%JAVA_HOME%\jre\lib;

分别表示当前目录,即自己的java类路径;jdk自带的标准类库路径。

JAVA_HOME

C:\Program Files\Java\jdk1.8.0_77

设置jdk的安装路径。

3.3 request.getRealPath()

用来获得绝对路径

  • request.getRealPath("/");//不推荐使用获取工程的根路径
  • request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用
  • this.getClass().getClassLoader().getResource("").getPath();//获取工程classes 下的路径,这个方法可以在任意jsp,servlet,java文件中使用,因为不管是jsp,servlet其实都是java程序,都是一个 class。所以它应该是一个通用的方法。

4. 相对路径的几种使用情况

1.若引用的资源和本身在同一路径下(既在同一目录下),直接:

<img src="tupian.gif" border="0"/>

2.要引用的文件在下一级文件夹下,文件名前加子文件夹名称

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html
假设index.html路径是:c:\Inetpub\wwwroot\sites\blabla\html\tutorials\index.html
在info.html加入index.html超链接的href应该这样写:html/tutorials/index.html

3.要引用的文件在上一级文件夹下,文件名前加../

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html
假设index.html路径是:c:\Inetpub\wwwroot\sites\index.html
在info.html加入index.html超链接的代码应该这样写:
<a href="../index.html">index.html</a>

举一反三: ../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推

4.更复杂的情况:

假设info.html路径是:c:\Inetpub\wwwroot\sites\blabla\info.html
假设index.html路径是:c:\Inetpub\wwwroot\sites\html\index.html
在info.html加入index.html超链接的代码应该这样写:<a href="../html/index.html">index.html</a>

5.最后一个例子

假设路径:D:\例子\html\style\view\pop.css
D:\例子\html\images\view\tupian.gif
在css中引用这个图片:<img src="../../images/view/tupian.gif" border="0"/>

在JSP/HTML等页面引用CSS,Javascript.Action等属性时,前面可以加上< %=request.getContextPath()%>,以确保所引用的文件都属于Web应用所在目录。因为当使用类似”.”,”./”,”../../”等相对路径时,文件移动很容易出问题,但对于目录结构不变的应用影响不大。

Java的绝对路径和相对路径的更多相关文章

  1. 【转】Java Web 项目获取运行时路径 classpath

    Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...

  2. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  3. Java Web 项目获取运行时路径 classpath

    假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么java文件夹和resources文件夹在运行时就是class ...

  4. Java获取路径方法&相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

  5. JAVA 获取web文件的相对路径

    转自:http://wwwdd2315.blog.163.com/blog/static/66661889201091953350298/ 在JAVA文件中获取该项目的相对路径1.基本概念的理解 绝对 ...

  6. Java学习-009-文件名称及路径获取实例及源代码

    此文源码主要为应用 Java 获取文件名称及文件目录的源码及其测试源码.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:2015-2-3 00:02:27,请知悉. Java获取文件名称的 ...

  7. Java或web中解决所有路径问题

    Java开发中使用的路径,分为两种:绝对路径和相对路径.归根结底,Java本质上只能使用绝对路径来寻找资源.所有的相对路径寻找资源的方法,都不过是一些便利方法.不过是API在底层帮助我们构建了绝对路径 ...

  8. Java工程读取resources中资源文件路径问题

    正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径.在本地工程和服务器中读取文件的方式有所不同,以下图配置文件为例. 本地读取资 ...

  9. java 项目得到jar和classes路径

    java 项目得到jar和classes路径 public static String getJarPath(Class clazz) { String path = clazz.getProtect ...

随机推荐

  1. 201521123015 《Java程序设计》第10周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 一.inally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 答: 4-2中 ...

  2. eastcom——eclipse中运行vtmserver项目

    1, vtmserver项目必须在tomcat7上运行. 2, 在Eclipse中vtmserver的截图 3, 在eclipse中配置一个tomcat7并将vtmserver加入其中 4, 在ecl ...

  3. 我和Python

    记不得是年,我在网易云课堂上乱逛,看到了哈佛大学的<计算机编程导论>,这门课讲的正好是Python,讲的啥内容已经记不得多少了,因为是全英文教学,我只能慢慢的看字幕,一集得看个好几遍. 我 ...

  4. Thinkphp3.2版本使用163邮箱发(验证码)邮件

    今天忽然想写一个用户修改密码的功能,又没有短信接口,只能选择用邮箱发送验证码啦,穷啊,没办法,哈哈,以下为正文. ------------------------------------------- ...

  5. Excel开发之旅(二)----数据的读写

    1.要实现数据的读写,首先,我们需要添加引用: using Excel=Microsoft.Office.Interop.Excel; 直接在项目中添加即可. 2.给3个按钮添加响应事件,工程代码截图 ...

  6. String的内存模型,为什么String被设计成不可变的

    String是Java中最常用的类,是不可变的(Immutable), 那么String是如何实现Immutable呢,String为什么要设计成不可变呢? 前言 关于String,收集一波基础,来源 ...

  7. Android性能优化xml之<include>、<merge>、<ViewStub>标签的使用

    一.使用<include>标签对"重复代码"进行复用 <include>标签是我们进行Android开发中经常用到的标签,比如多个界面都同样用到了一个左侧筛 ...

  8. C#最基本的小说爬虫

    新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:htt ...

  9. hdu1251字典树递归算法

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  10. 安卓App提交应用商店时遇到的两个小问题

    陆陆续续做了一个半月左右的「喵呜天气」终于在今天下午成功提交到应用商店(腾讯应用宝).期间遇到两个小问题,记录如下: 1.上传安装包失败,提示「无法获取签名信息,请上传有效包(110506)」. 安装 ...