讨论这个问题,先建立3个.jsp文件,文件位置如图
为了对比,首先使用myeclipse创建.jsp文件时把下面这几句话删掉。
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
(1)按照之前一些路径的知识,此时如果我们想从1.jsp跳转到a.jsp或者b.jsp路径应该是
<body>
<a href="a/a.jsp">a.jsp</a><br>
<a href="a/b/b.jsp">b.jsp</a>
</body>
反过来,如果想从a.jsp或者b.jsp跳转到1.jsp,我们得这样写
<body>
我是a.jsp<br>
<a href="../1.jsp">1.jsp</a>
</body>
<body>
我是b.jsp<br>
<a href="../../1.jsp">1.jsp</a>
</body>
这种写法是使用相对路径,就是当前文件去目标文件需要经过的路径,如果将a.jsp文件移动一下,这个路径就需要变化,而且使用需要../完成跳转,如果文件夹一层套一层,写起来就很繁琐。位置改变后的写法:
<body>
<a href="a/b/a.jsp">a.jsp</a><br>
<a href="a/b/b.jsp">b.jsp</a>
</body>
<body>
我是a.jsp<br>
<a href="../../1.jsp">1.jsp</a>
</body>
<body>
我是b.jsp<br>
<a href="../../1.jsp">1.jsp</a>
</body>
(2)这时可以使用绝对路径。/虚拟项目名/文件路径,比如此时各路径写法:
<body>
<a href="/jsp/a/b/a.jsp">a.jsp</a><br>
<a href="/jsp/a/b/b.jsp">b.jsp</a>
</body>
<body>
我是a.jsp<br>
<a href="/jsp/1.jsp">1.jsp</a>
</body>
<body>
我是b.jsp<br>
<a href="/jsp/1.jsp">1.jsp</a>
</body>
这次,再把a.jsp的位置改回原位置,只要改变下一个路径就可以。<body>
<a href="/jsp/a/a.jsp">a.jsp</a><br>
<a href="/jsp/a/b/b.jsp">b.jsp</a>
</body>
(3)再把使用myeclipse创建.jsp文件时删掉的那两句话添加到jsp文件中,此时,路径写起来就很轻松了。直接写资源路径就可以。
<body>
<a href="a/a.jsp">a.jsp</a><br>
<a href="a/b/b.jsp">b.jsp</a>
</body>
<body>
我是a.jsp<br>
<a href="1.jsp">1.jsp</a>
</body>
<body>
我是b.jsp<br>
<a href="1.jsp">1.jsp</a>
</body>
所以,myeclipse创建.jsp文件时删掉的那两句话,其实相当于给我们写了一个 /项目名/ 最后,在servlet中重定向时,路径最好写为:/虚拟项目名/资源路径
请求转发时,路径写为: /资源路径