什么是EL表达式

简介: EL表达式,全称为Expression Language,意为表达式语言。它是Servlet规范中的一部分,也是JSP2.0规范加入的内容。EL表达式的主要作用是用于在Java Web应用中访问和操作数据,使得JSP页面能够摆脱Java代码块和JSP表达式,实现代码的简化。

一、什么是EL表达式

EL表达式,全称为Expression Language,意为表达式语言。它是Servlet规范中的一部分,也是JSP2.0规范加入的内容。EL表达式的主要作用是用于在Java Web应用中访问和操作数据,使得JSP页面能够摆脱Java代码块和JSP表达式,实现代码的简化。

EL表达式的语法格式使用${}包裹,其中${}内部可以是一个表达式或者变量名。其主要用于在页面中获取和展示数据,执行算术运算,访问JavaBean属性,以及调用JavaBean方法等。此外,EL表达式定义了一些隐式对象,使得web开发人员可以轻松地获取对web常用对象的引用,并获取这些对象中的数据。

EL表达式为Java Web开发提供了一种更为简洁、高效的方式来处理数据和逻辑,使得开发过程更加便捷。

1、命令格式:${作用域对象别名.共享数据}

EL表达式是式工具包提供一种特殊命令格式表达式命令格式。

EL表达式在JSP文件上使用。

负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体。

二、EL表达式与作用域对象

1、JSP文件可以使用的作用域对象

ServletContext application:全局作用域对象;

HttpSession session:会话作用域对象;

HttpServletRequest request:请求作用域对象;

PageContext pageContext:当前页作用域对象;

这是JSP文件独有作用域对象。Servlet中不存在在当前页作用域对象存放的共享数据。仅能在当前JSP文件中使用,不能共享给其他servlet或则其他JSP文件。

真实开发过程,主要用于JSTL标签与JSP文件之间数据共享数据。

JSTL ------> pageContext ----> JSP

2、EL表达式提供作用域对象别名

JSP------------------------------EL表达式

application---------------------${applicationscope.共享数据名}

session-------------------------${sessionscope.共享数据名}

request-------------------------${requestscope.共享数据名}

pageContext------------------${pagescope.共享数据名}

3、EL表达式将引用对象属性写入到响应体

命令格式:${作用域对象别名.共享数据名.属性名}。

命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体。

属性名:一定要去引用类型属性名完全一致(大小写)。

EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出。

4、EL表达式简化版

1、命令格式:${共享数据名}

2、命令作用:EL表达式允许开发人员开发时省略作用域对象别名

3、工作原理:

EL表达式简化版由于没有指定作用域对象,所以在执行时采用猜算法。

首先到pageContext定位共享数据,如果存在直接读取输出并结束执行。

如果在pageContext没有定位成功,到request定位共享数据,如果存在直接读取输出并结束执行。

如果在request没有定位成功,到session定位共享数据,如果存在直接读取输出并结束执行。

如果在session没有定位成功,到application定位共享数据,如果存在直接读取输出并结束执行。

如果在application没有定位成功,返回null

pageContext—>request—>session—>applicationl

4、存在隐患: 容易降低程序执行速度,容易导致数据定位错误。

5、设计目的,就是简化从pageContext读取共享数据并输出难度。

6、EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都使用简化版,拒绝使用标准版。

三、EL表达式与运算表达式

1、前提:在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体;

2、运算表达式:

数学运算。

关系运算:> >= == < <= !=

gt ge eq lt le !=

逻辑运算:&& ll !

四、EL表达式提供内置对象

EL表达式提供了一系列内置对象,这些对象在无需创建的情况下即可直接使用,它们与Map相似。

pageScope:这是一个Map<String,Object>类型的对象。通过${pageScope.xxx},可以获取在pageContext中保存的数据。与pageContext.getAttribute(“xxx”)功能相同,但在数据不存在时,前者返回空字符串,而后者返回null。

header:此对象用于获取请求头中的值。例如,使用${header['User-Agent']}可以获取User-Agent请求头的值。

initParam:这个对象可以获得在web.xml中配置的<context-param>中的值。例如,如果在web.xml中配置了一个名为name的context-param,其值为tom,那么通过${initParam.name}就可以得到tom。

cookie:这个对象用于获取cookie的值。例如,通过${cookie.JSESSIONID.value}可以获取名为JSESSIONID的cookie的值。同时,也可以通过${cookie.username.maxAge}获取cookie的生存时间。、

fn:fn对象提供了一些常用的函数,可以方便地进行字符串处理、类型转换、日期处理等。

pageContext:在EL表达式中,pageContext与JSP内置对象中的pageContext是同一个对象。通过这个对象,可以获取到request、response、session、servletContext、servletConfig等对象。在EL中,这些对象不是内置对象,但可以通过pageContext获取。例如,${pageContext.request}可以获取request对象。

除了上述对象外,还有requestScope、sessionScope和applicationScope等对象,它们分别对应不同的域(scope),可以用来获取不同域中的属性值。

EL表达式的内置对象提供了丰富的功能,使得在JSP页面中可以方便地访问和操作各种数据。

1、命令格式:${param.请求参数名}

从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体。

代替命令:index.jsp

相关文章
|
安全 Java 编译器
高并发编程之什么是 JUC
高并发编程之什么是 JUC
384 1
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
无需人工奖励!Meta FAIR华人团队提出「早期经验学习范式」,AI智能体像人类一样“从错误中成长”
Lab4AI.cn提供免费的AI翻译和AI导读工具辅助论文阅读;支持投稿复现,动手复现感兴趣的论文;论文复现完成后,您可基于您的思路和想法,开启论文创新。
343 4
无需人工奖励!Meta FAIR华人团队提出「早期经验学习范式」,AI智能体像人类一样“从错误中成长”
|
5月前
|
缓存 安全 测试技术
RAID10和RAID5性能对比测试
本文通过实测对比4盘RAID5与RAID10在无缓存(Write Through)下的IO性能:RAID10直接写入达38.7MB/s,远超RAID5的7.4MB/s;启用缓存后RAID5读性能显著提升(128→357MB/s),但写性能仍极低。结论:无BBU保护时,RAID10更安全高效。(239字)
628 2
|
11月前
|
SQL Java 关系型数据库
Spring事务传播机制:7种姿势教你玩转"事务接力赛"
事务传播机制是Spring框架中用于管理事务行为的重要概念,它决定了在方法调用时事务如何传递与执行。通过7种传播行为,开发者可以灵活控制事务边界,适应不同业务场景。例如:REQUIRED默认加入或新建事务,REQUIRES_NEW独立开启新事务,NESTED支持嵌套回滚等。合理使用传播机制不仅能保障数据一致性,还能提升系统性能与健壮性。掌握这“七种人格”,才能在复杂业务中游刃有余。
|
JavaScript Java
EL表达式
这篇文章介绍了EL表达式的基本概念、语法、保留关键字、运算符及其优先级,并详细解释了如何在EL中访问数据、进行算术运算、判断对象是否为空、逻辑关系运算和条件运算。
EL表达式
|
运维 前端开发 持续交付
利用Github Actions实现自动化部署
利用Github Actions实现自动化部署
|
机器学习/深度学习 存储 PyTorch
【深度学习】Pytorch面试题:什么是 PyTorch?PyTorch 的基本要素是什么?Conv1d、Conv2d 和 Conv3d 有什么区别?
关于PyTorch面试题的总结,包括PyTorch的定义、基本要素、张量概念、抽象级别、张量与矩阵的区别、不同损失函数的作用以及Conv1d、Conv2d和Conv3d的区别和反向传播的解释。
1583 2
|
开发框架 Dart JavaScript
深入探讨Flutter中的Web支持功能,以及如何利用Flutter构建跨平台Web应用的最佳实践
【6月更文挑战第11天】Flutter,Google的开源跨平台框架,已延伸至Web支持,让开发者能用同一代码库构建移动和Web应用。Flutter Web基于Dart转JavaScript,利用WebAssembly和JavaScript在Web上运行。构建Web应用最佳实践包括选择合适项目、优化性能、进行兼容性测试和利用Flutter的声明式UI、热重载等优势。尽管性能挑战存在,Flutter Web为跨平台开发提供了更多机会和潜力。
642 1
|
Java Apache
Java解压rar5兼容rar4
【8月更文挑战第2天】在Java中解压rar5并兼容rar4格式文件通常需借助第三方库,如JUnrar。示例代码展示了如何利用JUnrar库解压rar文件:首先确保已添加JUnrar依赖,然后通过`Archive`类读取rar文件,并逐个提取非目录条目到指定路径。实际使用时需替换文件路径。也可考虑使用Apache Commons Compress库,但可能需额外配置以支持rar5和rar4。
1912 2
|
缓存 开发框架 数据库
深入理解 Flask 框架:高级特性与最佳实践
【5月更文挑战第18天】本文探讨了 Flask 框架的高级特性与最佳实践,包括蓝图、请求和应用上下文、数据库集成、错误处理、表单处理、缓存以及部署优化。通过示例代码展示了如何使用蓝图拆分应用模块,处理请求数据,集成 SQLAlchemy 进行数据库操作,自定义错误页面,利用 Flask-WTF 处理表单,使用缓存提升性能,以及考虑部署时的服务器配置和性能调优。理解并应用这些实践有助于构建高效、可靠的 Web 应用。
805 7