EL表达式详解(常用表达式以及取值)
EL表达式
学习总结
一、 El表达式概念
- EL表达式简介
1)Expression Language表达式语言
2)是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
3) 在JSP2.0开始引入概念
4)EL表达式存取值(例子如下)
| servlet | JSP页面 |
|---|---|
| request.setAttribute(“key”, value) | ${key} |
注意:EL表达式取值时,该值存储的作用域要存在,作用域被销毁了,值也就没了
EL表达式语法
1)${ 变量名或表达式}EL表达式作用
1)用于输出作用域中变量值
2)用于各种运算:算术、逻辑、关系、三元运算等EL表达式与JSP脚本表达式的区别
| 区别 | JSP脚本表达式 | EL |
|---|---|---|
| 语法 | <%=m %> | ${m} |
| 输出哪里的值 | 输出的是脚本变量 <% int m=5; %> |
输出的是作用域中的值 <% request.setAttribute(“m”, 5); %> |
注意事项:JavaBean的属性名或map的键名中如果有特殊字符的写法
| 变量名[“键名”] | 可以使用双引号,如:${map[“no3-no4”]} |
|---|
二、 El中的表达式
1. 算术表达式
| 算术运算符 | 说明 | 范例 | 结果 |
|---|---|---|---|
| + | 加 | ${1+1} | 2 |
| - | 减 | ${2-1} | 1 |
| * | 乘 | ${1*1} | 1 |
| / 或 div | 除 | ${5 div 2} 或 ${5 / 2} | 2.5 |
| % 或 mod | 取余 | ${5 mod 2} 或 ${5 % 2} | 1 |
| 输出哪里的值 | 输出的是脚本变量 <% int m=5; %> |
输出的是作用域中的值 <% request.setAttribute(“m”, 5); %> |
2. 比较表达式
| 关系运算符 | 说明 | 范例 | 结果 |
|---|---|---|---|
| == 或 eq | 等于(equal) | ${1 eq 1} | true |
| != 或 ne | 不等于(not equal) | ${1 != 1} | false |
| < 或 lt | 小于(Less than) | ${1 lt 2} | true |
| <= 或 le | 小于等于(Less than or equal) | ${1 <= 1} | true |
| > 或 gt | 大于(Greater than) | ${1 > 2} | false |
| >= 或 ge | 大于等于(Greater than or equal) | ${1 >= 1} | true |
3. 逻辑表达式
| 逻辑运算符 | 说明 | 范例 | 结果 |
|---|---|---|---|
| && 或 and | 交集(与) | ${true and false} | false |
| || 或 or | 并集(或) | ${true || false} | true |
| ! 或 not | 非 | ${not true} | false |
4. 三元表达式
| ${ 逻辑判断 ? 真的值 : 假的值 } |
|---|
5. 判空表达式
| ${ empty 变量名 } 变量一定要放在作用域中 |
|---|
| 1)如果变量名在作用域中为空,不存在,返回 true |
| 2)如果变量名为空串,返回 true |
| 3)变量名是一个集合,如果集合中没有元素,返回 true |
三、EL 从四个作用域中取值
1. 概念
EL 获取数据的方式是从4个作用域对象中,从小到大的去获取,如果需要指定作用域获取数据,可使用以下 EL 的内置对象来指定。
2. pageContext 对象
- JSP本质是 Servlet,但比 Servlet 多了一个作用域:页面域,在 JSP 中有四大作用域;
- 什么是页面域:只在一个 JSP 页面中起作用,不同的 JSP 之间不能实现数据的共享,比请求域范围还要小;
- 页面域对象名:pageContext,是 JSP 其中一个内置对象名。
| pageContext 操作有关的方法 | 说明 |
|---|---|
| void setAttribute(String key, Object value) | 向页面域中添加键和值 |
| Object getAttribute(String key) | 从页面域中得到值 |
| void removeAttribute(String key) | 删除四个作用域中同名的键 |
| Object findAttribute(String key) | 自动从四个作用域中去查某个键,从小到大的范围来查找,如果找到就停止;如果没有找到,返回 null; |
- 实例代码(当不同作用域存储键值对中的 key 相同时,使用 EL 表达式 ${key} 获取数据顺序为:从小到大(pageContext -> request -> session -> application));
// 向页面域中添加一个字符串
pageContext.setAttribute("name", "页面域");
// 请求域
request.setAttribute("name", "请求域");
// 会话域
session.setAttribute("name", "会话域");
// 上下文域
application.setAttribute("name", "上下文域");
// 自动查找作用域获取
${name}
- 作用域获取(当不同作用域存储键值对中的 key 相同时,想要直接获取该域对象的值可以通过 EL 表达式的方式)
<%-- EL 表达式的方式 --%>
<%-- 在作用域范围我们的名字取成一样了,怎么去找到特定的一个作用域中的值呢?? --%>
${pageScope.name}
${requstScope.name}
<%-- session比较特别,因为session是存在浏览器中的,只有关闭浏览器之后才可以拿到后面作用域中的值 --%>
${sessionScope.name}
${applicationScope.name}
注意:从下到大注释作用域设置数据代码,可看到 EL 表达式在往下获取数据
总结
以上就是对 EL 表达式取值的详细介绍了,代码仅供参考,欢迎讨论交流。
EL表达式详解(常用表达式以及取值)的更多相关文章
- Cron表达式详解和表达式的验证
本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接. 本文cron表达式详解的大部分内容参考了[cron表达式详解]和Quartz使用总结.Cron表达式 这两篇文章. cron校验的 ...
- Quartz.Net系列(九):Trigger之CronScheduleBuilder和Cron表达式详解
1.使用 var scheduler =await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); var jo ...
- Spring定时器corn表达式详解
1.结构 Spring定时器corn表达式详解 2.各字段的含义 字段 允许值 允许的特殊字符 秒 0~59 - * / 分 0~59 - * / 小时 0~23 - * / 日期 1~31 - * ...
- cron表达式详解
@Scheduled(cron = "* * * * * *") cron表达式详解 1.cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份( ...
- zabbix3.4.7触发器表达式详解
zabbix触发器表达式详解 概述:触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<functi ...
- Java 8 Lambda 表达式详解
一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...
- JAVA8之lambda表达式详解
原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- Lambda表达式详解(例子详解)(转自:http://blog.csdn.net/damon316/article/details/51734661)
Lambda表达式详解(例子详解) lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 ...
- spring定时任务(@Scheduled注解)cron表达式详解
cron表达式详解: 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(~) 分钟(~) 小时(~) 天(~) 月(~) 星期(~ =SUN 或 SUN,MON,TU ...
随机推荐
- Linux swap分区操作
swap交换分区是系统RAM的补充,swap 分区支持虚拟内存.当没有足够的 RAM 保存系统处理的数据时,会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止 ...
- laravel 框架简易增删改查
参看网址:http://www.yan.com/mou/add 图书增加HTML页面 //图书增加路由 Route::get('mou/add','MouController@store'); //控 ...
- Clickhouse中的预聚合引擎
作者: LemonNan 原文地址: https://mp.weixin.qq.com/s/qXlmGTr4C1NjodXeM4V9pA 注: 转载需注明作者及原文地址 介绍 本文将介绍 Clickh ...
- 30 面向对象编程 抽象类 abstract 修饰符可以用来修饰方法也可以修饰类
抽象类 概念 abstract 修饰符可以用来修饰方法也可以修饰类, 如果修饰方法,那么该方法就是抽象方法: 如果修饰类,那么该类就是抽象类. 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为 ...
- C# 静态成员和方法的学习小结
C# 静态成员和方法的学习小结 数据成员:数据成员可以分静态变量.实例变量两种.静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对 ...
- java-Dos
打开CMD的方式 1.菜单打开 2.Windows+R 输入cmd 3.shift+鼠标右键 选择在此处打开命令行窗口 4.资源管理器地址栏前+cmd 空格 管理员身份运行 常用的Dos命令 #盘符切 ...
- JDK8的 CHM 为何放弃分段锁
概述 我们知道, 在 Java 5 之后,JDK 引入了 java.util.concurrent 并发包 ,其中最常用的就是 ConcurrentHashMap 了, 它的原理是引用了内部的 Seg ...
- OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台
前言 移植opencv到海思平台,opencv支持对视频进行解码,需要对应的ffmpeg支持. Ffmpeg的移植 Ffmpeg的移植请参考之前的文章:<FFmpeg开发笔记(十): ...
- 常见的反爬措施:UA反爬和Cookie反爬
摘要:为了屏蔽这些垃圾流量,或者为了降低自己服务器压力,避免被爬虫程序影响到正常人类的使用,开发者会研究各种各样的手段,去反爬虫. 本文分享自华为云社区<Python爬虫反爬,你应该从这篇博客开 ...
- 教你识别一些sequence的相关问题
摘要:通过一些自定义的视图或者查询语句,批量识别集群的sequence相关问题 本文分享自华为云社区<GaussDB(DWS)运维 -- sequence常见运维操作>,作者: 譡里个檔. ...