我们在写jsp页面的时候,经常见到下面几个关于路径的写法:
比如
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+
request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%
或:
还有:
a href="${pageContext.request.contextPath}/static/doem.css
实际上,上面这个几个都是在jsp里面代表着路径的写法,相对路径,绝对路径。
听我一一说来。
${pageContext.request.contextPath}
是jsp页面中取得绝对路径的方法,等价于
<%=request.getContextPath()%>
二者达到是同样的效果。
也就是有的人在jsp顶部经常写:
<% String path = request.getContextPath(); %> ,这是取得绝对路。
表示:取出部署的应用程序名 或者 是当前的项目名称。
举例:
比如我的项目名称是demo1。
在浏览器中输入为 http://localhost:8080/demo1/index.jsp
那么采用
${pageContext.request.contextPath}
或
<%=request.getContextPath()%>
取出来的就是 /demo1
而"/"代表的含义就是http://localhost:8080
故有时候项目中这样写:
${pageContext.request.contextPath}/indx.jsp 或
<%=request.getContextPath()%>/index.jsp ,
访问到的就是 http://localhost:8080/demo1/index.jsp
<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
/%>
这个语句是用来拼装当前网页的相对路径的,
request.getSchema() 可以返回当前页面使用的协议,就是上面例子中的“https”。
request.getServerName() 可以返回当前页面所在的服务器的名字,就是上面例子中的“localhost"。
request.getServerPort() 可以返回当前页面所在的服务器使用的端口,就是80。
request.getContextPath() 可以返回当前页面所在的应用的名字,就是上面例子中的demo1。
这四个拼装起来的 basePath ,就是当前应用的跟路径了,
组合起来就是:https://localhost:80/demo1/
这个一般和上面的basePath 搭配使用。
一般写在jsp的title下面,
< base href="…"> 表明当前页面的相对路径所使用的根路径的
比如,页面内部有一个连接,完整的路径应该是 http://localhost:80/demo1/authen/login.do
其中:
http://localhost:80/ 是服务器的基本路径,
demo1 是当前应用程序的名字,
那么,我的根路径应该是那么http://localhost:80/demo1/
当你在页面上写了:
因为服务器会自动把 指定的路径和页面内的相对路径拼装起来,组成完整路径。
如果没有这个,那么我页面的连链接就必须写全路径,否则服务器会找不到。
这也是一些配置了tomcat虚拟路径以后,上传图片。
写上了惯用${pageContext.request.contextPath}/static/test.jpg 反而访问不了图片。
而直接写static/test.jpg,却可以看见图片的原因。
相对路径
相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。 **
**
绝对路径
随着不同的Web应用发布方式,绝对路径的值也不同。采用绝对路径,但为了解决不同部署方式的差别。但是操作不便,其他工具无法正确解释。