关于jsp页面写pageContext.request.contextPath和request.getContextPath()等路径问题

${pageContext.request.contextPath}和<%=request.getContextPath()%>等路径问题

我们在写jsp页面的时候,经常见到下面几个关于路径的写法:

1.jsp页面写pageContext.request.contextPath和request.getContextPath()?

比如

<%
	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和request.getContextPath()等路径问题_第1张图片

2.为什么要这么写呢?

实际上,上面这个几个都是在jsp里面代表着路径的写法,相对路径,绝对路径。

听我一一说来。

1. ${pageContext.request.contextPath}

${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 

2.一般页面顶部都写:

    <%
    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/

3.最后:base .... .


这个一般和上面的basePath 搭配使用。

一般写在jsp的title下面,

< base href="…"> 表明当前页面的相对路径所使用的根路径的

比如,页面内部有一个连接,完整的路径应该是 http://localhost:80/demo1/authen/login.do
其中:

http://localhost:80/ 是服务器的基本路径,

demo1 是当前应用程序的名字,

那么,我的根路径应该是那么http://localhost:80/demo1/

当你在页面上写了:以后,我的jsp页面中凡是内容的连接,url,src,都可以不写全路径,只需要写 authen/login.do 就可以访问项目对应的url地址。

因为服务器会自动把指定的路径和页面内的相对路径拼装起来,组成完整路径。

如果没有这个,那么我页面的连链接就必须写全路径,否则服务器会找不到。

这也是一些配置了tomcat虚拟路径以后,上传图片。

写上了惯用${pageContext.request.contextPath}/static/test.jpg 反而访问不了图片。
而直接写static/test.jpg,却可以看见图片的原因。

4.补充一下

相对路径
相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。 **
**
绝对路径
随着不同的Web应用发布方式,绝对路径的值也不同。采用绝对路径,但为了解决不同部署方式的差别。但是操作不便,其他工具无法正确解释。


你可能感兴趣的:(java,web,开发)