关于pageContex--页面上下文对象自己的理解,只是作为新手学习很浅显的认识,如有误,请大牛指出,或者请告诉我更深的理解,感激不尽!
新建jsp1和jsp2,目录结构如下:
在jsp1页面中添加一个超链接<a href="jsp2.jsp">跳转到jsp2</a>,点击超链接,将会出现404错误,找不到jsp2.jsp。这是什么原因,按理说jsp1.jsp和jsp2.jsp位于同一目录下,按相对路径查找应该能在当前目录下找到,但是为什么找不到呢?原因在于我们创建一个jsp页面时,编译器会默认为我们加上下图几句话
在页面顶部java小脚本中加入”System.out.print(basePath)”,刷新页面控制台会输出”http://localhost:8088/BookShop/”这句话,这句话就是项目完整的路径,而<base href="<%=basePath%>">这句话的意思就是从根目录开始查找,所以当在jsp1.jsp向jsp2.jsp跳转时,默认就是从根路径开始查找jsp2.jsp,由于jsp2.jsp在WebRoot目录下的jsp文件夹中,并不在WebRoot目录下,所以就无法找到。想要找到jsp2必须将超链接写成<a href="jsp/jsp2.jsp">跳转到jsp2</a>。
如果去掉 <base href="<%=basePath%>"这句话,就代表不是从项目根目录开始查找,这样<a href="jsp2.jsp">跳转到jsp2</a>就是相对路径查找,就可以成功从当前目录jsp文件夹下找到了jsp2.jsp。
${pageContext.request.contextPath }就是输出web站点的根目录名称,和<base href="<%=basePath%>"具有相同的作用,如果没有<base href="<%=basePath%>">这句话,想要从jsp1.jsp跳转到WebRoot目录下的index.jsp界面,则必须在jsp1.jsp中写”<a href="${pageContext.request.contextPath }/index.jsp">跳转到index</a>”,路径第一个必须是${pageContext.request.contextPath }。或者使用相对路径查找<a href="../index.jsp">