关于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()+"/";
%

或:

<base href="<%=basePath%>" 

还有:

a href="${pageContext.request.contextPath}/static/doem.css 

如图:
在这里插入图片描述

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 .... .

<base href="<%=basePath%>">

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

一般写在jsp的title下面,

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

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

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

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

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

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

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

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

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

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

4.补充一下

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


  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖一点雨

原创不易,鼓励鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值