学习总结

一、 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表达式详解(常用表达式以及取值)的更多相关文章

  1. Cron表达式详解和表达式的验证

    本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接. 本文cron表达式详解的大部分内容参考了[cron表达式详解]和Quartz使用总结.Cron表达式 这两篇文章. cron校验的 ...

  2. Quartz.Net系列(九):Trigger之CronScheduleBuilder和Cron表达式详解

    1.使用 var scheduler =await StdSchedulerFactory.GetDefaultScheduler(); await scheduler.Start(); var jo ...

  3. Spring定时器corn表达式详解

    1.结构 Spring定时器corn表达式详解 2.各字段的含义 字段 允许值 允许的特殊字符 秒 0~59 - * / 分 0~59 - * / 小时 0~23 - * / 日期 1~31 - * ...

  4. cron表达式详解

    @Scheduled(cron = "* * * * * *") cron表达式详解 1.cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份( ...

  5. zabbix3.4.7触发器表达式详解

    zabbix触发器表达式详解 概述:触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<functi ...

  6. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  7. JAVA8之lambda表达式详解

    原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...

  8. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  9. Lambda表达式详解(例子详解)(转自:http://blog.csdn.net/damon316/article/details/51734661)

    Lambda表达式详解(例子详解)     lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 ...

  10. spring定时任务(@Scheduled注解)cron表达式详解

    cron表达式详解: 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(~) 分钟(~) 小时(~) 天(~) 月(~) 星期(~ =SUN 或 SUN,MON,TU ...

随机推荐

  1. 使用 Istio CNI 支持强安全 TKE Stack 集群的服务网格流量捕获

    作者 陈计节,企业应用云原生架构师,在腾讯企业 IT 负责云原生应用治理产品的设计与研发工作,主要研究利用容器集群和服务网格等云原生实践模式降低微服务开发与治理门槛并提升运营效率. 摘要 给需要快速解 ...

  2. 【OpenCV】【计算机图形学】DIBR: Depth Image Based Rendering/ 3D image warping 中的实现细节

    最近在学习DIBR并尝试实现.感觉网上相关资料比较少,大多还是爬虫,决定自己写一个. DIBR就是depth image based rendering问题.输入一个视角下的图像和深度图,要求你输出另 ...

  3. Clickhouse中的预聚合引擎

    作者: LemonNan 原文地址: https://mp.weixin.qq.com/s/qXlmGTr4C1NjodXeM4V9pA 注: 转载需注明作者及原文地址 介绍 本文将介绍 Clickh ...

  4. BSOJ5086题解

    题意略. 我们设 \([x^k]G_n(x)\) 代表深度为 \(n\) 的树,距离为 \(k\) 的点对数量,\([x^k]F_n(x)\) 为深度为 $ n $ 的树中,深度为 \(k\) 的节点 ...

  5. Solon 1.6.33 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  6. 魅族mx3手机 固件升级方法

    1.正常手机刷机,升级固件的方法 我今天3.5升4.2.8都提示固件损坏 后来我找客服 一定要用电脑下3.8固件 然后按住开机和音量+ 进入刷机模式 然后连接电脑 电脑会给你一个900mb的磁盘 拉进 ...

  7. CodeGym-17~20

    读文章 0.如果是基本数据类型的话,在数组中就存储特定的值:如果是对象的话,在数组中就是存储对象的引用. 1.数组本身就是对象 再读文章 0.Arrays.sort(array); Arrays.to ...

  8. ARM中断与架构知识 精简知识点

    目录 一.ARM系统的异常与中断 二.CPU模式与寄存器 1.ARM CPU模式 2.ARM CPU state,两种指令集 3.ARM CPU寄存器: 引申介绍一下存储空间中的数据存放 4.ARM三 ...

  9. 【论文阅读】CVPR2022: Learning from all vehicles

    Column: March 23, 2022 1:08 PM Last edited time: March 23, 2022 11:13 PM Sensor/组织: 现leaderboard第一名, ...

  10. luogu4883 mzf的考验

    题目描述: luogu 题解: 当然splay. 区间翻转是基本操作. 区间异或?按套路记录区间内每一位$1$的个数,异或的时候按位取反即可. 区间查询同理. 因为要按位维护,所以复杂度多了个log. ...