最近自己在开发一个项目时候,想引用bootstrap文件,一直引用不对,于是研究了下相对路径和绝对路径的关系。
一、相对路径和绝对路径
先解释下相对路径和绝对路径的区别:
网上搜到的内容如下:
1.什么是绝对路径:
大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。类似于这样完整的描述文件位置的路径就是绝对路径。我们不需要知道其他任何信息就可以根据绝对路径判断出文件的位置。而在网站中类似以http://www.pckings.net/img/photo.jpg来确定文件位置的方式也是绝对路径。
另外,在网站的应用中,通常我们使用"/"来表示根目录,/img/photo.jpg就表示photo.jpg文件在这个网站的根目录上的img目录里。但是这样使用对于初学者来说是具有风险性的,因为要知道这里所指的根目录并不是你的网站的根目录,而是你的网站所在的服务器的根目录,因此当网站的根目录与服务器根目录不同时,就会发生错误。
2.什么是相对路径:
让我们先来分析一下为什么会发生图片不能正常显示的情况。举一个例子,现在有一个页面index.htm,在这个页面中联接有一张图片photo.jpg。他们的绝对路径如下:
c:/website/index.htm
c:/website/img/photo.jpg
如果你使用绝对路径c:/website/img/photo.jpg,那么在自己的计算机上将一切正常,因为确实可以在指定的位置即c:/website/img/photo.jpg上找到photo.jpg文件,但是当你将页面上传到网站的时候就很可能会出错了,因为你的网站可能在服务器的c盘,可能在d盘,也可能在aa目录下,更可能在bb目录下,总之没有理由会有c:/website/img/photo.jpg这样一个路径。那么,在index.htm文件中要使用什么样的路径来定位photo.jpg文件呢?对,应该是用相对路径,所谓相对路径,顾名思义就是自己相对与目标位置。在上例中index.htm中联接的photo.jpg可以使用img/photo.jpg来定位文件,那么不论将这些文件放到哪里,只要他们的相对关系没有变,就不会出错。
另外我们使用“../”来表示上一级目录,“../../”表示上上级的目录,以此类推。(学习过dos的朋友可能更容易理解)
总结:个人简单来说,绝对路径说白了就是完整路径,比如我在同一目录(C:\Users)有A.TXT和B.TXT两个文件,那么绝对路径就是C:\Users\A.txt和C:\Users\B.txt 而绝对路径就是A.txt和B.txt,因为它们两都在C:\Users这个目录下的。
而我们常常在页面会用到引用CSS或者图片的,js的,这个时候在页面的前面就需要引用,路径的不对,会导致相关引用也不对。
二、引用路径
那么针对路径,我们是如何引用呢?这就是第二个问题,引用。
1.${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%>
比如我的项目名称叫project,那么${ctx}就是/project
说明下:
假定你的名称为project,你在浏览器中输入请求路径:
http://localhost:8088/project/list.jsp
则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath()); //可返回站点的根路径。也就是项目的名字
打印结果:/project
2、System.out.println(request.getServletPath());
打印结果:/list.jsp
3、 System.out.println(request.getRequestURI());
打印结果:/project/list.jsp
4、 System.out.println(request.getRealPath("/"));
打印结果:C:\Tomcat 7.0\webapps\project\test
2.<base href="<%=basePath%>"> 所谓的小脚本
这里的${basePath}获得是绝对路径,比如http://localhost:8088/project/list.jsp,这里的${basePath}是http://localhost:8088/project/ 注意包含最后一个‘/’的。