1 绝对路径与相对路径
绝对路径就是以http开头,例如:http://localhost/hello/index.jsp,这就是绝对路径。但这并不是我们要研究的,我们要研究的是相对路径。
相对路径需要有父路径,即相对路径相对的谁!例如:index.jsp、jsps\index.jsp,这都是相对路径。相对路径一定要有一个父路径,也就是说我们需要把相对路径转换成绝对路径。
大多数情况下我们都是使用相对路径,而不是绝对路径。因为这有助与我们发布、部署项目。我们在本机上的主机名可能为127.0.0.1,但是当项目开发结束后会放到服务器机上,在公网上使用。这时的主机IP,以及域名就不再是我们现在使用的域名了。所以,相对路径要方便我们的项目移置。
2 与客户端相关的相对路径
与客户端相关的相对路径大多数都是在网页中,例如超链接、表单等。还有重定向指定的路径也是与客户端相关的路径。respnse.sendRedirect(“BServlet”),其中BServlet就是一个相对路径。
相对路径分为两种,一种是以“/”开头,另一种是不以“/”开头。其中以“/”开头的相对路径表示其父路径是当前主机。不以“/”开头的相对路径表示其父路径是当前路径。
例如response.sendRedirect(“/hello/BServlet”)以“/”开头,那么就是主机的相对路径,即主机地址加上相对路径:http://localhost/hello/BServlet。其中hello是上下文路径!
例如<a href=”/hello/BServlet”>BSERVLET</a>,也是以“/”开头,而且超链接与重定向都是与客户端相关的路径,所以都是http://localhost/hello/BServlet。
下面我们要讨论一下不以“/”开头的相对路径。它是比较让人头痛的相对路径!而且我们也不建议使用它!!!
上面已经说了,不以“/”开头的相对路径是当前路径的相对路径,即父路径是当前路径。那什么又是当前路径呢?例如在http://localhost/hello/jsps/index.jsp页面中存在一个超链接,其内容为:<a href=”BServlet”>BSERVLET</a>,那么父路径就是http://localhost/hello/jsps/,也就是与当前index.jsp页面在同一父路径下:http://localhost/hello/jsps/BSERVLET。
在http://localhost/hello/servlet/AServlet中的重定向语句为response.sendRedirct(“BServlet”),那么重定向的路径为:http://localhost/hello/servlet/BServlet。
在要注意,我们在基础班中学习过HTML,知道什么叫<base>元素了,<base>元素会影响当前页面中所有相对路径的父路径。
当页面中存在<base>时,那么不以“/”开头的相对路径都是<base>元素的href属性值加上相对路径。例如<base>元素的href属性值为http://localhost/day07_02/,页面中相对路径为a.jsp,那么相对路径转换成绝对路径后为:http://localhost/day07_02/a.jsp。也就是说在没有<base>时,是当前路径的相对路径,在有了<base>后,那么就是<base>的href属性值的相对路径了!
注意,如果是以“/”开头的相对路径,永远都是主机的相对路径,即http://localhost/。
3 与Tomcat(服务器)相关的相对路径
与Tomcat相关的相对路径就是Tomcat内部的相对路径,例如在web.xml文件中的<url-pattern>元素的内容,还有请求转发时的路径,这些都是与Tomcat相关的相对路径。
在<url-pattern>中必须以“/”开头(除非使用了通配符),与Tomcat相关的相对路径,如果以“/”开头,那么父路径就是当前上下文路径。
对于<url-pattern>没有什么可说的,因为它必须以“/”开头,所以容易理解。但是对于请求转发就不一样了。请求转发可以以“/”开头,也可以不以“/”开头!
以“/”开头表示相对上下文路径(http://localahost/day07_02),不以“/”开头,那么相对当前路径。
4 规范路径的编写
建议大家一律使用“/”开头来编写相对路径,无论是页面中,还是Servlet中,都以“/”开头来编写。
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee