相对路径和绝对路径的区别 

在HTML里只要涉及文件的地方(如超级链接、图片等)就会涉及绝对路径与相对路径的概念。 

.绝对路径
绝对路径是指文件在硬盘上真正存在的路径。例如“bg.jpg”这个图片是存放在硬盘的“E:\book\网页布局代码\第2章”目录下,那么 “bg.jpg”这个图片的绝对路径就是“E:\book\网页布\代码\第2章\bg.jpg"。那么如果要使用绝对路径指定网页的背景图片就应该使用 以下语句:
<body backround="E:\book\网页布局\代码\第2章\bg.jpg" > .使用绝对路径的缺点
事实上,在网页编程时,很少会使用绝对路径,如果使用“E:\book\网页布\代码\第2章\bg.jpg”来指定背景图片的位置,在自己的计算机上 浏览可能会一切正常,但是上传到Web服务器上浏览就很有可能不会显示图片了。因为上传到Web服务器上时,可能整个网站并没有放在Web服务器的E盘, 有可能是D盘或H盘。即使放在Web服务器的E盘里,Web服务器的E盘里也不一定会存在“E:\book\网页布局\代码\第2章”这个目录,因此在浏 览网页时是不会显示图片的。 .相对路径
为了避免这种隋况发生,通常在网页里指定文件时,都会选择使用相对路径。所谓相对路径,就是相对于自己的目标文件位置。例如上面的例子,“s1.htm” 文件里引用了“bg.jpg”图片,由于“bg.jpg”图片相对于“s1.htm”来说,是在同一个目录的,那么要在“s1.htm”文件里使用以下代 码后,只要这两个文件的相对位置没有变(也就是说还是在同一个目录内),那么无论上传到Web服务器的哪个位置,在浏览器里都能正确地显示图片。
<body background="bg.jpg">
再 举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页 布局\代码\第2章\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的“img”子目录里,则引用图片的语句应该 为:
<body background="img/bg.jpg"> 注意:相对路径使用“/”字符作为目录的分隔字符,而绝对路径可以使用“\”或“/”字符作为目录的分隔字符。由于“img”目录是“第2章”目录下的子目录,因此在“img”前不用再加上“/”字符。
在 相对路径里常使用“../”来表示上一级目录。如果有多个上一级目录,可以使用多个“../”,例如“http://www.cnblogs.com/”代表上上级目录。假设 “s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网页布局\代码”,那 么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里,则引用图片的语句应该为:
<body background="../bg.jpg"> 再举一个例子,假设“s1.htm”文件所在目录为“E:\book\网页布局\代码\第2章”,而“bg.jpg”图片所在目录为“E:\book\网 页布局\代码\img”,那么“bg.jpg”图片相对于“s1.htm”文件来说,是在其所在目录的上级目录里的“img”子目录里,则引用图片的语句 应该为:
<body background="../img/bg.jpg"> .相对虚拟目录
有关相对路径还有一个比较特殊的表示:“相对虚拟目录”。请看下面的例子:
<body background="/img/bg.jpg"> 在这个例子里,background属性的值为“/img/bg.jpg”,注意在“img”前有一个“/”字符。这个“/”代表的是虚拟目录的根目录. 假设把“E:\book\网页布局\代码”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页布局\代码\img \bg.jpg”;如果把“E:\book\网页布局\代码\第2章”设为虚拟目录,那么“/img/bg.jpg”的真实路径为“E:\book\网页 布局\代码\第2章\img\bg.jpg” 在jsp和class文件中调用的相对路径不同。 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径。 .jsp中取得路径:
以工程名为TEST为例:
()得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/TEST/test.jsp
()得到工程名:request.getContextPath()
结果:/TEST
()得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/test.jsp
()得到页面所在服务器的全路径:application.getRealPath("页面.jsp")
结果:D:\resin\webapps\TEST\test.jsp
()得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:\resin\webapps\TEST .在类中取得路径:
()类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
()得到工程的路径:System.getProperty("user.dir")
结果:D:\TEST .在Servlet中取得路径:
()得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
()得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
()得到相对地址:request.getRequestURI()
结果:/TEST/test 另,Class类还有一个getResourceAsStream方法,记得以前有个项目要读取在同一个包内的一个xml,就用的这个。 .如何获得当前文件路径 常用:
().Test.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
().Test.class.getResource("/")
得到的是当前的classpath的绝对URI。
().Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI。
().Test.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI。
().ClassLoader.getSystemResource("")
得到的也是当前ClassPath的绝对URI。
尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径,后面可以看出得出结果五花八门。
() new File("").getAbsolutePath()也可用。 注:若这些路径中出现空格,并且空格被 代替,则可以使用path = java.net.URLDecoder.decode(path,"utf-8") 进行转化; .Web服务器
().Tomcat
在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin
().Resin
不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成Servlet的路径为根.比如用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下
().如何读文件
使用ServletContext.getResourceAsStream()就可以
().获得文件真实路径 String file_real_path=ServletContext.getRealPath("mypath/filename");
不建议使用request.getRealPath("/");

最新文章

  1. 几款开源ESB总线的比较
  2. equals和==的区别
  3. C#中as用法
  4. 一致性哈希算法 - consistent hashing
  5. 突然想起android与mfc差异
  6. C#根据当前日期获取星期和阴历日期
  7. 服务器返回数组,data[0]得到的总是不对?如何处理?
  8. request 获取请求参数
  9. 图解 javascript 作用域链
  10. 坑到了,EF执行带事物的存储过程
  11. 线形,柱形,条形数据表(百度Echart插件)
  12. P1082丛林探险
  13. js参数截取
  14. JAVA刚碰见的问题( java.lang.SecurityException: The jurisdiction policy files are not signed by a trusted signer)
  15. 在windows中,使用SSH登录VMware ubuntu linux虚拟机
  16. go语言nsq源码解读八 http.go、http_server.go
  17. Git常用的操作记录(自用)
  18. 一台机器部署多个tomcat服务 nginx反向代理多个服务 笔记
  19. Vue和后台交互的方式
  20. Delphi XE8 中TIdTCPClient的WriteLn编码变化!

热门文章

  1. AI理论学习笔记(一):深度学习的前世今生
  2. 前端开发日记之jQuery
  3. gitlab库迁移
  4. javascript异步编程的几种方法
  5. spring mvc:常用标签库(文本框,密码框,文本域,复选框,单选按钮,下拉框隐藏于,上传文件等)
  6. ddt读取json文件测试用例的执行顺序
  7. 51nod1293 dp
  8. Mysql的锁机制——待写
  9. 使用MouseWithoutBordersSetup共享鼠标键盘教程
  10. python多线程抓取代理服务器