1.绝对路径
所谓绝对路径,就是资源文件在硬盘上的真实路径或者部署到web服务器上之后引用资源的完整路径。如:
D:/项目名/css/a.css
http://localhost:8080/项目名/css/a.css
可以为jsp中当前文件引入的资源文件使用绝对路径,强烈推荐使用绝对路径。
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
上述代码可获取当前项目的路径,如:http://localhost:8080/项目名称。
在<head></head>中添加如下一行代码:
<base href="<%=basePath%>">
如下图,为在此jsp文件中引入css.css
<link type="text/css" rel="stylesheet" href="css/css.css" />
2.相对路径
所谓相对路径,就是相对于当前文件,待引入的资源文件的位置。如“a.jsp” 文件里引用了“m.js”,若a.jsp和m.js在同一个目录,只要这两个文件的相对位置没有变,那么部署到web服务器就能正常显示。
<script type="text/javascript" src="m.js"></script>
或
<script type="text/javascript" src="./m.js"></script>
./ 当前目录 ../ 上一级目录 ../../上上一级目录
./a.js ../a.js ../../a.js
3.服务器端与客户端的路径问题
不能以是否用"/"开头,作为资源文件引用的开始,来判断使用的是绝对路径或相对路径,而应该使用这个资源文件的最终的路径来判断。
服务器端:
getServletContext().getRealPath("/img/pic.jpg");
上述代码可以获取服务器端资源的路径,开头的/代表的是从项目根路径(站点+项目名)查找参数指定资源的路径,如:http://localhost:8080/项目名/
服务器端请求分派
String path = "/test/abc"
request.getRequestDispatcher(path).forward(request, response);
客户端:
客户浏览器访问的当前文件,其所引入的资源文件路径,开头的/代表的是服务器站点的根路径,如:http://localhost:8080/
response.sendRedirect(path);
服务器端的重定向,将请求路径返回给客户端浏览器,让客户端浏览器使用返回的新请求路径,重新发起请求。其原理类似于客户端浏览器直接访问新路径,请求相关资源。