jsp文件里面跳转时的路径问题
在jsp里面经常会有跳转,就涉及到绝对路径和相对路径的问题。
绝对路径一般的表示
“./”表示的是当前目录
“../”表示上级目录,"../.../"表示上级目录的的上级目录
举一个例子
WebContent下面有index.jsp,即WebContent/inde.jsp.
WebContent下面有个jsp子目录,jsp子目录下面有个hello.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页面,
再看一种情况,
index.jsp跳转到hello.jsp页面
此时浏览器中的路径变为:
http://localhost:8080/SpringMVC/jsp/hello.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>
这样的形式