绝对路径和相对路径
-
如果咱们使用的URL网址是以“/”开头的 ,那么这个网址就叫做绝对路径。
-
如果咱们使用的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当作当前路径去计算相对路径当然 没有问题。是我们欺骗了浏览器, 在服务器偷偷改变了请求流向,返回了其他页面的内容。
清楚了以上的请求流程,就知道如何应对这种问题了。
-
第一种方法:不要在不同目录之间使用forward做请求转发 ,保证当前路径不发生变化。
-
第二种方法:像上例一样修改图片路径,或全部改为绝对路径。
上一篇: 如何获取系统文件名称及路径
推荐阅读
-
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结_javascript技巧
-
实例详解Angular实现较为复杂的表格过滤和删除功能
-
浅析C#中的“==”和Equals的示例代码
-
Debian7用PHP5-FPM支持Nginx和PHP交互
-
php遍历目录下所有文件和子文件夹的代码
-
javascript - laravel和ant.design的问题
-
JavaScript:new 一个函数和直接调用函数的异同
-
Oracle 删除用户和表空间
-
JavaScript 之arguments、caller 和 callee 介绍
-
jQuery和canvas实现的球体平抛及颜色动态变换效果