在静态页面时代,资源的路径通常不会存在太大问题,像样式表文件的链接,脚本文件的引用,图片资源的引用等,一般使用相对路径就可以解决。因为使用相对路径一个是便于整体的移动,另一个对于静态预览提供了有利的支持,即我们在不起动服务器的情况下就可以看到页面的预览效果。但是现在在进行WEB应用程序开发时大多为动态页面,并且出现路径也非常的平凡,出现路径问题最根本的一个原因是出现客户端请资源的虚地址与实际的转发动态页面文件地址是不一致的,或者说虚拟文件路径与实际转发的动态页面地址不在同一个目录下,才会造成所谓的路径问题。
第一类路径问题:
最典型一类路径问题是请求的虚地址文件与转发的动态页面文件不在同一个目录,而页面上引用的其它地址资源是使用相对路径。比如请求的路径为:/应用名称/action/hello.do,而此请求路径转发的路径为:/应用名称/hello.jsp,一些程序员开发时喜欢使用相对路径,在一个动态页面中引用资源,使用相对路径,最喜欢的方式,当然就是相对于当前的动态页面的相对路径,因为这可以在不起动服务器的情况下预览页面的部分效果。然而在实际WEB服务器运行时,动态页面中的相对路径是相对于请求路径的,因此当请求路径与转发的动态页面不在同一目录下时,那么在动态页面中相对路径的引用将找不到对应的资源。解决这个问题一般有三种方法:一就是修改动态页面,让相对路径取相对值,是从请求路径计算的;二也是修改动态页面,就是将相对路径都改为绝对路径,当然这两种方法都无法进行静态预览;第三种方法就是将请求路径修改成与转发的动态页面处于相同的目录级别,此时既可以进行静态的预览,也可以在运行时找到引用的资源。
①尽量使得请求路径与转发的动态页面文件处于同一目录,那么在页面上对资源的引用,使用相对路径时就可以相对当前页面进行计算,这样即可以保证静态预览,又可保证在实际请求时引用对应的资源;
②在动态语言中对资源的引用如果使用绝对路径,即以/开头的路径,这里的/表示当前应用的上下文路径,例如<%@ include file="/css/table.jsp" %><jsp:include flush="true" page=""></jsp:include>它们都是如此。如果当前应用名称为ext,那么绝对路径/css/table.jsp表示的路径为:/ext/css/table.jsp。对于像<img />等标签对资源的引用,如果使用绝对路径,则最开始的/并不代表当前应用上下文,而是代表当前应用服务器,要特别小心这种差别。并且它使用相对路径引用资源是相对于当前页面,而非请求路径,但是被含义的页面中如果引用资源,那么它们如果相对路径则它们是相对于请求路径
③由于动态语言对资源的引用的上述特点,因此它们其实使用绝对路径反而比较合适,因为应用名称,始终被应用这些绝对路径的前面,并且使用<%@ include file="/css/table.jsp" %>可以进行静态的预览,但是<jsp:include flush="true" page=""></jsp:include>是不可以的
④可以使用<%@ include file="/css/table.jsp" %>来包含一些重复使用的页头内容,如果请求路径与页面路径是一致的那么可以进行静态预览⑤