在web应用中,以“/”开头的是绝对路径,不以“/”开头的是相对路径。
在服务器端,通常都使用绝对路径。例如web.xml、struts.xml、servlet等的访问路径都是以“/”开始。
服务器端的“/”等同于:http://localhost:8080/day01/。(day01为工程名)
在客户端,可使用绝对路径,也可使用相对路径。例如html、jsp、css、javascript中。
但是客户端的绝对路径与服务器端的绝对路径中的“/”代表的意思是不同的。
客户端的“/”等同于:http://localhost:8080/。(它是不带工程名的)
比如:这里有一个web工程:day01,在工程根目录下有两个页面:1.jsp和2.jsp。
1.jsp中有一个超链接:<a href=“/2.jsp”>点击跳转到2.jsp</a>,我们在地址栏输入:http://localhost:8080/day01/1.jsp即可
访问1.jsp,然后点击超链接后提示错误404,找不到页面。这是由于我们点击超链接后的访问地址是这样的:http://localhost:8080/2.jsp
所以提示找不到。超链接改成这样就可以了:<a href=“/day01/2.jsp”>点击跳转</a>
如果使用相对路径是怎样的呢?
比如:这里有一个web工程:day01,在工程根目录下有一个页面:1.jsp,同时有一个目录:jsp,jsp目录下有一个目录:menu,menu目录下有一个页面:2.jsp。我们在地址栏输入: http://localhost:8080/day01/jsp/menu/2.jsp 可访问到2.jsp。
在2.jsp中有一个超链接,点击可跳转到1.jsp。假如这个超链接是这样的:<a href=“1.jsp”>点击跳转到1.jsp</a>,点击后提示错误404,找不到页面。因为这里使用了相对路径(相对与当前页面),点击超链接后的访问路径是这样的:http://localhost:8080/day01/jsp/menu/1.jsp,所以提示找不到。改成这样就可以了:<a href=“../../1.jsp”>点击跳转到1.jsp</a>。(“..”代表当前目录的上一级目录)
可以看出,客户端使用相对路径非常麻烦,需要考虑当前页面的位置,所以在客户端我们也统一使用绝对路径。
但是客户端的绝对路径中都要带着工程名,是写死的,假如有一天工程名修改了,所有页面中的超链接都要改,工作量太大。
所以这里的工程名不能写死,要动态获取。改成这样就可以了:<a href=“<%=request.getContextPath() %>/1.jsp”>点击跳转到1.jsp</a>。
request.getContextPath()就是获取工程名:/day01 (注意:这种方式只适用于JSP,html因为是静态页面不能写java代码,所以只能将工程名写死!)