java web项目中的路径,有相对路径和绝对路径
什么是相对路径呢 举个简单例子
我们有项目 test 发布后地址 http://localhost:8080/test/
页面 qiantai/login.jsp 页面中链接 <a href="index.jsp" />
JSP页面相相对寻址 链接的最终地址是 http://localhost:8080/Test/qiantai/index.jsp
相对路径是这么一个过程 首先取当前文件的路径 也就是 http://localhost:8080/test/qiantai/
然后拼接链接的地址 index.jsp 所以结果就如上 ......qiantai/index.jsp
在CSS、JS的引用中为防止后台转发造成的问题,应尽量使用绝度路径
第一种方案
JSP页面中自带两个路径参数 path和basePath
页面的开头,有这么一段代码
<%
String path = request.getContextPath(); 获得当前路径 例如 http://localhost:8080/test/qiantai/
//获得本项目的地址 例如 http://localhost:8080/test/ 赋值给 basePath
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//将项目路径 basePath 放入pageContext中,待以后用EL表达式读出
pageContext.setAttribute("basePath",basePath);
%>
链接改用 <a href="${pageScope.basePath}qiantai/index.jsp">
从而构成一个绝对路径 http://localhost:8080/test/qiantai/index.jsp
但是这样做有一个很不好的地方,那就是我们必须要在每个链接的前面都要加上 “${pageScope.basePath}”
第二种方案
使用HTML中的base标签(推荐使用)
对base的介绍:base 元素可规定页面中所有链接的基准
URL默认情况下,页面中的链接(包括样式表、脚本和图像的地址)都是相对于当前页面的地址(即:浏览器地址栏里的请求URL)。
我们可以使用 <base>标签中的href属性来设置,所有的“相对基准 URL”。
<head>
<!-- base需要放到head中 -->
<base href="http://localhost:8080/test/"> 或者 <base href="<%=basePath%>" />
</head>
这样就可以直接使用相对路径 <a href="index.jsp" />
设置了 <base>后,相对路径,相对于的就是base中的路径,而不再是浏览器地址的请求路径啦~~~
我们可以看到JSP返回的html代码中,包含了 <base href="http://localhost:8080/test/">内容
也就是说,在本html文件中,遇到的所有 “相对链接(例如: <a href="login.jsp">)”,都是相对于base
这样就不用担心转发操作(forward)或 请求地址不同不同所造成的页面无法找到的错误啦~(即: HTTP: 404)。。。
也可以很好的避免因转发造成的css或js引用地址错误问题,以为页面的路径都是以base为基准的。