jsp文件里面跳转时的路径问题

在jsp里面经常会有跳转,就涉及到绝对路径和相对路径的问题。

绝对路径一般的表示

“./”表示的是当前目录

“../”表示上级目录,"../.../"表示上级目录的的上级目录

举一个例子

jsp文件里面跳转时的路径问题

WebContent下面有index.jsp,即WebContent/inde.jsp.

WebContent下面有个jsp子目录,jsp子目录下面有个hello.jsp.

jsp文件里面跳转时的路径问题

在12行 Say Hello是一个链接,即index.jsp要跳转到hello.jsp。

浏览器中的访问路径:http://localhost:8080/SpringMVC/

这样就返回了index.jsp页面,

但是浏览器中的地址是不变的,还是http://localhost:8080/SpringMVC/


index.jsp是默认的拦截页面,所有的跳转都是相对SpringMVC而言

跳转的方式有两种:

1.相对路径:

就是上图中展示的  href="./jsp/hello.jsp"这是相对路径,“./”代表的是当前根目录,

这样的表示方式就可以顺利跳转到hello.jsp页面,


jsp文件里面跳转时的路径问题




再看一种情况,

index.jsp跳转到hello.jsp页面

此时浏览器中的路径变为:

http://localhost:8080/SpringMVC/jsp/hello.jsp

jsp文件里面跳转时的路径问题

创建的目录结构如上图

现在浏览器展示的hello.jsp页面,浏览器中的地址为:http://localhost:8080/SpringMVC/jsp/hello.jsp.

跳转的链接为:<a href="../successful/success.jsp">success.jsp</a>,"../successful"就返回到它的上级目录,浏览器的地址会变为:http://localhost:8080/SpringMVC/

浏览器会接着执行路径:successful/success.jsp,完整的路径变为http://localhost:8080/SpringMVC/successful/success.jsp,这也是页面跳转完成后浏览器中的路径显示。



再看绝对路径:

只要我们每次在访问的路径前面加上basePath=http://localhost:8080/SpringMVC/,就不能考虑到底有几层目录,

假设一个jsp有两层目录比如index.jsp页面,那么一个页面要跳转到index.jsp的跳转链接就可以表示为basePath+/index/myindex/index.jsp,

这样就不用考虑文件的位置问题了

在jsp中获得basePaht的方式:

 <% String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path; %>


request.getScheme()获取的是协议名称,即http

request.getServerName H获取的是域名,本地服务器域名就是localhost

request.getServerPort()获取端口号

request.getContextPath()返回站点的根目录 就是SpringMVC

跳转链接就可以写成

 <a href="<%=basePath %>/jsp/hello.jsp">Say Hello</a>  
     <a href="<%=basePath %>/successful/success.jsp">success</a>

这样的形式