绝对路径和相对路径

  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. 第二种方法:像上例一样修改图片路径,或全部改为绝对路径。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值