EL表达式总结

1.JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。

2.JSP EL允许您指定一个表达式来表示属性值。一个简单的表达式语法如下:

${expr}

其中,expr指的是表达式。在JSP EL中通用的操作符是 . 和 {} 。这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。

3.

JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

隐含对象 描述
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
param Request 对象的参数,字符串
paramValues Request对象的参数,字符串集合
header HTTP 信息头,字符串
headerValues HTTP 信息头,字符串集合
initParam 上下文初始化参数
cookie Cookie值
pageContext 当前页面的pageContext

您可以在表达式中使用这些对象,就像使用变量一样。

  1. pageContext(1)  当前页的pageContext对象  
  2. pageScope   把page作用域中的数据映射为一个map对象  
  3. requestScope(2)     把request作用域中的数据映射为一个map对象  
  4. sessionScope    把session作用域中的数据映射为一个map对象  
  5. applicationScope    把application作用域中的数据映射为一个map对象  
  6. param   对应request.getParameter()  
  7. paramValues(3)  对应request.getParameterValues()  
  8. header(4)   对应request.getHeader()  
  9. headerValues    对应request.getHeaderValues()  
  10. cookie(5)   对应request.getCookies()  
  11. initParam(6)    对应ServletContext.getInitParamter()  

4.

  1. 使用el的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。  
  2.   
  3. 如果我们有${username}这样一个正则表达式,它回去依次调用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),只要找到某一个不为空的值就立刻返回。  
  4.   
  5. 这样的确方便我们的操作,但是随之也出现了另外一个问题,如果pageContext和request中有同名变量,但是我想取得request中的变量该如何是好呢?这就需要为el表达式引入作用域的概念了。  
  6. ${pageScope.username} ${requestScope.username}  
5.

JSP取得绝对路径

在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下:

一、使用${pageContext.request.contextPath}

  代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。

例如:

1 <!--使用绝对路径的方式引入CSS文件-->
2 <link rel="stylesheet" href="${pageContext.request.contextPath}/themes/default/css/ueditor.css" type="text/css"/>
3 <!--使用绝对路径的方式引入JavaScript脚本-->
4 <script type="text/javascript" src="${pageContext.request.contextPath}/ueditor1_3_6-gbk-jsp/ueditor.config.js"></script>

使用<%=request.getContextPath()%>和使用${pageContext.request.contextPath}达到同样的效果

6.

  1. pageScope, requestScope, sessionScope, appliationScope都可以看作是Map型变量,调用其中的数据可以使用${pageScope.name}或${pageScope["name"]}的形式,这两种写法是等价的。  
  2.   
  3. 在某些情况下只能使用${pageScope["content-type"]},这里不能写成${pageScope.content-type},jsp无法解析连字符(-)会出现错误。 
7.
  1. 需要注意的是${paramValues.name}得到的是一个字符串数组,如果需要获得其中某个值,还需要使用${paramValues.name[0]}指定数组中的索引。  
  2.   
  3. 这与下面的${headerValues.name}是相似的。  
8.
  1. ${cookie.name}将获得对应cookie的对象,比如我们用jsp将一段cookie发送给客户端。  
  2. Cookie cookie = new Cookie("username", "Username in cookie"); response.addCookie(cookie);  
  3.   
  4. 创建一个名称为username,值为"Username in cookie"的Cookie对象,然后发送给客户端。  
  5.   
  6. 然后我们就可以使用${cookie.username}获得这个cookie了,${cookie.username.name}获得cookie名称,${cookie.username.value}获得cookie值。  
9.
  1. ServletContext.getInitParamter()指的应用的初始变量,这些变量都是定义在web.xml中的。  
  2. <context-param> <param-name>username</param-name> <param-value>username with context param</param-value> </context-param>  
  3.   
  4. ${initParam.username}就会得到这里的变量值。  
10.

EL中的基础操作符

EL表达式支持大部分Java所提供的算术和逻辑操作符:

操作符 描述
. 访问一个Bean属性或者一个映射条目
[] 访问一个数组或者链表的元素
( ) 组织一个子表达式以改变优先级
+
- 减或负
*
/ or div
% or mod 取模
== or eq 测试是否相等
!= or ne 测试是否不等
< or lt 测试是否小于
> or gt 测试是否大于
<= or le 测试是否小于等于
>= or ge 测试是否大于等于
&& or and 测试逻辑与
|| or or 测试逻辑或
! or not 测试取反
empty 测试是否空值

10.

JSP EL中的函数

JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

${ns:func(param1, param2, ...)}

ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:

${fn:length("Get my length")}

要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值