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

绝对路径和相对路径

程序员文章站 2022-05-10 08:42:03
...
  1. 如果咱们使用的URL网址是以“/”开头的 ,那么这个网址就叫做绝对路径。

  2. 如果咱们使用的URL网址 是“/”开头的 ,那么这个网址就叫做相对路径。


<%request.getRequestDispatcher("result/result.jsp").forward(request, response);%>
 相对路径


<%request.getRequestDispatcher("/relative/result/result.jsp").forward(request, response);%> 
 绝对路径

forward导致找不到图片的问题

 

打开03-04可以看到如下的目录结构:

|--+ 03-04
   |--- index.jsp
   |--- test.jsp
   |--+ result
      |--- success.jsp
      |--- failure.jsp
      |--- lingo.png
            

刚才咱们看到的页面是failure.jsp,它里边显示图片的部分是:

<img src="lingo.png" />        

这时候就有疑问了,lingo.png和failure.jsp明明在同一个目录下,为什么无法显示

<img src="result/lingo.png" />
 

结果手工加上result这段路径后就可以显示图片了。

 

这个问题还要追溯到浏览器对html的处理方式,在html里包含的图片,css样式表,js脚本,视频等等外部资源,都需要浏览器再次向服务器发起请求。

如果这些外部资源使用了相对路径,浏览器就会在当前请求路径的基础上,加上相对路径拼接出完整的http请求,发送给服务器。这个例子中,我们请求 http://localhost:8080/03-04/test.jsp,浏览器得到的当前路径就是http://localhost:8080 /03-04/,failure.jsp中图片的相对路径是lingo.png,那么拼接的结果是http://localhost:8080 /03-04/lingo.png。

不要怪浏览器太傻,是因为使用forward的时候浏览器并不清楚这些改变。它一直认为,既然自己请求的是test.jsp,返回的自然就是test.jsp的内容,那么再使用test.jsp当作当前路径去计算相对路径当然 没有问题。是我们欺骗了浏览器, 在服务器偷偷改变了请求流向,返回了其他页面的内容。

清楚了以上的请求流程,就知道如何应对这种问题了。

  1. 第一种方法:不要在不同目录之间使用forward做请求转发 ,保证当前路径不发生变化。

  2. 第二种方法:像上例一样修改图片路径,或全部改为绝对路径。