EL表达式基础语法总结
一、EL表达式概述
JSP主要的作用是实现动态页面,而动态页面中最主要的作用就是把数据动态显示。
目前,JSP中显示数据主要用表达式实现,即<%=%>可以说,EL (Expression Language)表达式语言,就是用来替代<%=%>的,EL比<%=%>更简洁,更方便。
二、EL表达式基本语法
EL的基本语法是$ { }结束
例如:输出名字是username的请求参数${param.username}
param是EL中的内置对象表达式:
<%=request.getParameter(“username")%>
除了语法不同EL更为“贴心”,当username为null时,EL就不显示。而表达式会显示null
与JSP表达式区别:JSP中使用的变量是脚本变量,而EL中的变量都是作用域变量,要操作的变量都在作用域中。
EL表达式是可以替代JSP页面中数据访问时的复杂编码可以自动转换类型,并且使JSP的开发变得更加简单。
在Servlet或JSP中保存数据request.setAttribute(“username”,“LiYang”);
在JSP中访问数据姓名:${username}按照 page →request → session →application的作用域顺序依次查找,找到即返回,最终找不到返回null。
三、内置对象
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP 信息头,字符串 |
headerValues | HTTP 信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的pageContext |
EL中有两个与请求参数有关的内置对象
param用来输出请求参数的值,格式为$ {param.请求参数名字},如下代码所示:
使用表达式:
<%=reqest.getParameter("name")%>
使用EL:
${param.name}
paramValues:用来获取一对多的参数值,返回一个数组。比如某请求参数是通过checkbox传递的,名字为hobbies,要输出所有hobbies值中的第一个值,可以使用如下两种方式:
使用表达式:<%=request.getParameterValues("hobbies")[0]%>
使用EL:
${paramValues.hobbies[0]}
有属性有关的内置对象
- pageScope:页面范围,即pageContext范围
- requestScope:请求范围
- sessionScope:会话范围
- applicationScope:上下文范围
与请求头有关的内置对象
header:输出某一个请求头的值。
输出请求头accept的值
$(header.accept}
headerValues:如果某个请求头的值有多个,则使用headerValues返回一个数组。如下代码所示:
${headerValues.cookie[0]}
上述代码将返回请求头cookie中的第一个值,例如:
JSESSIONID=A6A22CA4AEE8F9E1111422C889740B24其他两个内置对象:cookie和initParam
- cookie:用来获取cookie的值
${cookie.JSESSIONID.value}
上述代码将输出名字为JSESSIONID的cookie的值。
initParam:用来输出上下文参数的值。
在web.xml中配置上下文参数:
<context-param><param-name>path</param-name><param-value>/WEB-INF/props</param-value> </context-param>
在JSP中使用EL输出path的值:
${initParam.path}
最特殊的内置对象:PageContext
EL中的pageContext对象可以调用PageContext类中所有符合规范的getXxx方法,如PageContext类中有如下方法:
public abstract ServletRequest getRequest()可以通过如下EL调用该方法:
${pageContext.request}
该方法将输出请求对象,如下所示:
org.apache.catalina.gore.ApplicationHttpRequest@1b98cbb
既然该EL返回的是真正的请求对象,那么就可以继续调用HttpServletRequest中的其他getXxx方法,如:${pageContext.request.remoteAddr}
上述表达式将调用请求中的getRemoteAddr方法,输出其返回值,例如:127.0.0.1
四、运算符
算术运算符
EL中支持五种算术运算符,有 +实现加法运算;- 实现减法运算;* 实现乘法运算;/ 或div实现除法运算;% 或mod实现求模运算。
如下代码所示:
$19+2}<br> ${19-2]<br> ${19*2]<br> ${19/2}<br> ${19%2]<br>
比较运算符
EL中有6种比较运算符,可以对值进行比较,返回值为true或fasle。
运算符 含义 ==、eq 等于 <、lt 小于 > 、gt 大于 <=、le 小于等于 >=、ge 大于等于 其他运算符
EL中除了有上面学习的算术、比较、逻辑运算符外,还有三种其他运算符。
empty运算符:判断值是否为null,如果是null,返回true,否则返回false。
以下几种情况为空:
- 值为null值的时候,为空
- 值为空串的时候,为空
- 值是Object类型数组,长度为零的时候
- list集合,元素个数为零
- map集合,元素个数为零
三目运算符:${A?B:C }如果A为true,则执行B,如果A为false,则执行C。
( )运算符:通过()可改变优先级。
EL中虽然提供了运算符,但是目前看没有太大意义,不可能直接输出一些运算结果,而往往运算结果将作为流程控制使用。
五、总结
- 可见使用EL能大大简化JSP中表达式
- 然而,EL不能实现流程控制,所以目前看并不能实现复杂的逻辑,必须结合标签一起使用,才能发挥更大作用。
- .JSP的标准标签库JSTL,结合EL一起使用,将能够大大简化JSP。
EL表达式基础语法总结相关推荐
- el表达式的语法_「手把手教python3接口自动化」「第三章」:Python3 语法
1 Python3 语法 1.1 基础语法 [编码] 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码. [标 ...
- Java 8 Lambda表达式基础语法
/*** * 一.Lambda 表达式的基础语法:* Java8中引入了要给新的操作符 "->" 该操作符称作箭头操作符 或 Lambda操作符* 箭头操作符将Lambda拆 ...
- 一文快速了解EL表达式基础知识
目录 EL表达式是干什么用的? EL表达式出现在JSP中主要是: EL表达式很好用,基本的语法格式: EL表达式的使用: EL表达式优先从小范围中读取数据. EL表达式中有四个隐含的隐式的范围: EL ...
- JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】...
什么是EL表达式? 表达式语言(Expression Language,EL),EL表达式是用"${}"括起来的脚本,用来更方便的读取对象! EL表达式主要用来读取数据,进行内容的 ...
- JavaWeb——EL表达式
在JSP开发中,为了获取Servlet域对象中存储的数据,需要书写很多的Java代码,这样会使JSP页面看起来十分的混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式.EL是Expressio ...
- EL表达式JSON应用
由于之前在学校写的jsp页面都是夹杂着java代码的,所以之前写了个jsp,满满的<%%>和java代码,老师说那样太不美观了啊!!!要全部用EL表达式替代了.本人还是太笨了,弄了一上午才 ...
- el表达式 循环_EL表达式+JSTL+Ajax 047
El表达式的语法: ${表达式} 注意: 自带响应功能 El表达式的使用: El表达式获取请求数据 获取用户请求数据(请求实体) ${param.键名} 获取请求实体中一个键一个值的数据 ${para ...
- 跟小博老师一起学JSP ——EL表达式
为了尽可能减少JSP中的JAVA代码简化JSP开发,相关的新技术被引入了进来.EL表达式将原有的JAVA代码化繁为简,提升JSP代码的阅读性,也提高了开发效率. EL表达式 EL表达式全称叫Expre ...
- 28. EL 表达式 以及 JSTL 标签库
28. EL 表达式 以及 JSTL 标签库 1.EL 表达式 a)什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达 ...
最新文章
- Yann LeCun等最新研究:如何对未来实例分割进行预测?
- 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!...
- yield %%% generator
- linux ie 插件目录在哪个文件夹里,Linux下的IE浏览器使用方法[图]
- (转)CentOS分区操作详解
- SQL中Group By的用法整理
- Python - 排序( 插入, 冒泡, 快速, 二分 )
- java大数 bigin_Java大数操作
- UI交互设计师在准备简历时应该注意什么?
- 我为什么要放弃RESTful,选择拥抱GraphQL?
- 群体智能之人工蜂群算法及其改进(ABC)
- 关于CAN APE的使用一些记录
- 我是一名自由职业白帽黑客
- CANoe CAPL文件操作目录合集
- 计算机本地连接没有有效ip配置,本地连接没有有效的ip配置,详细教您本地连接没有有效的ip配置怎么解决...
- 003.原生数据类型使用陷阱 Pitfall of Primitive Data Type
- APP产品经理(一)
- PHP微信扫码关注公众号并授权登录源码
- 【梁小国】教你怎么签自己的名字
- 这2个在线资源网千万别错过,老司机人手一份,一年省下好几千
热门文章
- 【机器学习】【隐马尔可夫模型-3】后向算法:算法详解+示例讲解+Python实现
- 女神节送什么给礼物女友好,2022女神节送礼合集
- 欢迎使通过网页免费下载全网歌曲【转载】
- 【inline、inline-block间的空隙】
- 日本全新超级计算机ABCI向“全球最快”目标冲击
- 日本计划建造世界上速度最快的超级计算机
- 1月第4周安全回顾 移动安全受关注 黑客威胁公共设施
- c语言输出字符的utf码,C语言里如何把GBK码转换为UTF8?
- 力扣(226.112)补9.8
- 大snbsp;汪小菲nbsp;闪婚