jsp内的 pageContext.request.contextPath理解与EI表达式在jsp的使用

jsp中常常出现的pageContext.request.contextPath

  • 这里面涉及几个知识点: EI表达式, jsp内置对象, 以及EI表达式的内置对象
  • jsp内置对象主要涉及四个域对象:
在学习jsp时,经常能看到 ${pageContext.request.contextPath} 这种写法而疑惑,通过上网查阅很多资料,写下自己的理解与感悟, 这篇博客主要是讲一下关于这个的EI表达式用法.

首先我们需要知道这里面涉及的知识点EI表达式及其内置对象,jsp内置对象

  • jsp内置对象(主要为4个域对象)
    jsp里面主要有9个内置对象,我们通常用四个"特殊"对象,也就是域对象,这是jsp内置的对象,我们可以直接用,通过形如: <%=request.getContextPath()%> 或者 <% request.getContextPath()%> 的两种形式(<%= … >和<%=…>)

PageContext 的实例对象 : pageContext
HttpServletRequest 实例对象 : request
HttpSession 实例对象 : session
ServletContext 实例对象 : application
(一定要注意后面加黑的才是对象名字,才是我们可以直接在jsp中用的)

  • EI表达式子及内置对象
    EI表大致主要是jsp获取数据的一种规范,或者说简易写法(比如获取域对象内的信息,或者表单数据等),语法主要为 ${…}
    EI内置对象主要有11个:
    这里面除了pageContext 外,其余的形如 pageScope requestScope param等10个均为指向一个Map对象(集合), 如requestScope 代表 request 域中用于保存属性的 Map 对象, 仅仅有pageContext为域对象,为域对象,为域对象.

也就是说,在EI表达式中,仅仅可以用这么一个域对象+11个map 集合,对于其他三个域对象中的除了Map集合外的其他内容,我们是没办法使用的,也没办法使用其他域对象的方法.至少没办法直接使用

但是,神奇的 pageContext 不仅可以在EI中直接使用,在jsp中也能直接使用,且代表意思完全相同,于是,这就是一个桥梁!

比如,通过pageContext对象的getRequest()方法,我们可以获得Request域对象!

pageContext.getRequest()    ${pageContext.request}

后者即为我们在EI中的简易写法
于是最终答案呼之即出:

 ${pageContext.request.contextPath}

即为: 先获得request对象.底层通过getRequest()方法
然后再获得contextPath:当前应用的虚拟目录, 底层通过调用request对象的getContextPath()方法

这里是引用一个其他博文言简意赅的写法: ${pageContext.request.contextPath}等价于<%=request.getContextPath()%> 或者可以说是<%=request.getContextPath()%>的EL版 意思就是取出部署的应用程序名或者是当前的项目名称

比如我的项目名称是ajax01 在浏览器中输入为http://localhost:8080/ajax01/login.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>取出来的就是/ajax01,而"/"代表的含义就是http://localhost:8080

所以我们项目中应该这样写${pageContext.request.contextPath}/login.jsp4
来源: https://blog.csdn.net/u011161002/article/details/84087364

  • 一个有趣的写法:
 <% String path = request.getContextPath(); %>
 <% 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/

参考链接:https://blog.csdn.net/ITBigGod/article/details/82886359
参考链接:https://blog.csdn.net/w_linux/article/details/79850223
参考链接:https://blog.csdn.net/qq_38181976/article/details/73087383

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值