JavaWeb——JSP表达式语言(EL)
1、JSP表达式语言(EL)用于在jsp从访问存储在JavaBean中的数据,例如
User ID: ${user.userId}<br />
这里的${user.userId}就是JSP EL表达式,效果就是:
User ID: 19358
19358是userId的数据
2、语法
- 立即执行
立即执行EL表达式将在页面渲染的时候,被JSP引擎解析和执行。这就意味着EL表达式将在JSP引擎中发现它,并在继续执行其他页面部分之前执行它,就类似c语言中的宏那样,下面的例子中EL表达式将会立即执行,其中expr是一个EL表达式
${expr}
美元符号和两个花括号定义了EL表达式的边界,在括号中的所有的内容都会作为EL表达式执行。所以如果我们需要使用美元符号就需要进行转义
- 延迟执行
延迟执行EL表达式是统一表达式的一部分主要用于满足JavaServer Faces的需要。下面的例子将是一个延迟执行的EL表达式
#{expr}
3、添加EL表达式
EL表达式可以直接用在JSP的任何位置,除了少数特殊情况。首先不能用在任何指令中,因为编译JSP时,指令将会被执行,但是EL表达式是在渲染JSP时执行,所以这里的EL表达式是无法正常工作的。
另外,JSP声明<%!%>、脚本<%%>或者表达式<%=%>中的EL表达式也是无效的。
除此之外,EL表达式可以添加在任意的位置
- 简单文本中
User ID: ${expr}
- 标准的HTML标签中
<input type="text" name="something" value="${expr}"/>
- JSP标签中
<c:url value ="/something/${expr}/${expr}"/>
4、基础操作符
| 操作符 | 描述 |
|---|---|
| . | 访问一个Bean属性或者一个映射条目 |
| [] | 访问一个数组或者链表的元素 |
| ( ) | 组织一个子表达式以改变优先级 |
| + | 加 |
| - | 减或负 |
| * | 乘 |
| / or div | 除 |
| % or mod | 取模 |
| == or eq | 是否相等 |
| != or ne | 是否不等 |
| < or lt | 是否小于 |
| > or gt | 是否大于 |
| <= or le | 是否小于等于 |
| >= or ge | 是否大于等于 |
| && or and | 与 |
| || or or | 或 |
| ! or not | 取反 |
| empty | 是否空值 |
5、对象属性和方法
EL表达式通过.进行JavaBean中属性的简化语法,假设现在有一个类user,有名为userId的类
${user.userId}
如果使用这个表达式来访问userId字段,这是行不通的因为这里的.实际寻找的是userId属性而非字段,也就是说将调用的是user.getuserId()类似的JavaBean标准访问方法。
如果没有这样的标准方法,应该这样进行访问
${user["userId"]}
6、EL函数
JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:
${ns:func(param1, param2, ...)}
其中ns是命名空间,func是函数名,param1、param2...是参数
比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:
${fn:length("Get my length")}
7、lambda表达式
lambda表达式就是一个匿名函数,EL lambda就是用箭头操作符->分割左侧的表达式参数和右侧的表达式,以下是两个有效的EL lambda表达式
${(a -> a + 5) (4)}
${((a,b) -> a + b) (3, 5)}
还可以这样使用:
${v = (a , b) -> a +b; v(3, 5)}
8、集合
- map
现假设有一个map拥有键username和ueseId,那么可以使用中括号访问这两个键的键值
${map["username"]}
${map["userId"]}
也可以使用.
${map.username}
${map.userId}
- list
假设有一个list,它包含了三个值"green"、"red"、"blue",按照0到2d的顺序一存储,那么可以只有访问
${list[0]}
${list[1]}
${list[2]}
不能使用.
9、试用
先新建一个类User,每个字段都将拥有相应的set和get方法
public class User {
private long userId;
private String username;
private String firstname;
private String lastname;
private Map<String,Boolean> permission = new Hashtable<>();
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Map<String, Boolean> getPermission() {
return permission;
}
public void setPermission(Map<String, Boolean> permission) {
this.permission = permission;
}
}
然后是Servlet:
@WebServlet(
name = "ELServlet",
urlPatterns = "/EL"
)
public class ELServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user = new User();
user.setUserId(19358L);
user.setUsername("Username");
user.setFirstname("Firstname");
user.setLastname("Lastname"); Hashtable<String,Boolean> permissions = new Hashtable<>();
permissions.put("user", true);
permissions.put("moderator", true);
permissions.put("admin", false);
user.setPermission(permissions); req.setAttribute("user",user);
req.getRequestDispatcher("/WEB-INF/jsp/view/EL.jsp")
.forward(req,resp);
}
}
最后是JSP
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>User</title>
</head>
<body>
User ID: ${user.userId}<br />
Username: ${user.username}(${user.username.length()} characters)<br/>
Full Name: ${user.lastname += "," += user.firstname}
<br/><br/>
<b>Permissons (${fn:length(user.permission)})</b><br/>
User: ${user.permission["user"]}<br/>
Moderator: ${user.permission["moderator"]}<br/>
Admin: ${user.permission["admin"]}<br/>
</body>
</html>
需要注意的地方有user.username.length()这里相等于使用的是String的length方法,user.lastname += "," += user.firstname这里也是简单的使用 += 进行字符串的拼接fn:length(user.permission),这里调用fn:length函数输出permission的长度。
结果:

10、使用隐含的EL变量
JSP EL支持下表列出的隐含对象:
| 隐含对象 | 描述 |
|---|---|
| pageScope | page 作用域 |
| requestScope | request 作用域 |
| sessionScope | session 作用域 |
| applicationScope | application 作用域 |
| param | Request 对象的参数,字符串 |
| paramValues | Request对象的参数,字符串集合 |
| header | HTTP 信息头,字符串 |
| headerValues | HTTP 信息头,字符串集合 |
| initParam | 上下文初始化参数 |
| cookie | Cookie值 |
| pageContext | 当前页面的pageContext |
JavaWeb——JSP表达式语言(EL)的更多相关文章
- 【jsp】详解JSP表达式语言(EL)
一.JSP EL语言定义 E L(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 ...
- JSP 表达式语言
JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整型数,浮点 ...
- JSP表达式语言(EL)
JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整数型.浮点型.字符串.常量 ...
- 表达式语言EL
表达式语言EL 表达式语言 EL(Expression Language,表达式语言)主要是用在JSP页面中,用来辅助我们产生无脚本的JSP页面,此处的脚本指的是JSP中的Java代码. EL的语法是 ...
- 表达式语言EL简单学习
Jsp2.0最重要的特性就是表达式语言EL.jsp用户可以用它来访问应用程序数据. EL表达式以${开头并以}结束. ${expresion} ${x+y} 它也常用来连接两个表达式,取值将从 ...
- JSP-Runoob:JSP 表达式语言
ylbtech-JSP-Runoob:JSP 表达式语言 1.返回顶部 1. JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建 ...
- 06.十分钟学会表达式语言EL
一. 概念:MVC设计模式一个主要好处就是让jsp中的代码越来越来少,而且规定只能出现三种代码:接收属性,判断语句,迭代输出.但是,在开发中,jsp输出至少还是需要接受VO对象的,这时候为了避免导入V ...
- Java EE之表达式语言EL(上)
1.了解表达式语言 表达式语言(EL)用于在不使用脚本.声明或者表达式的情况下,在JSP页面中渲染数据. EL曾是JSTL 1.0规范(与JSP 1.2)中的一部分,并且只可以用作JSTL标签的特性. ...
- Java EE之表达式语言EL(下)
1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...
随机推荐
- MYSQL事务、锁
MYSQL事务 事务: 原子性 : 要么都执行,要么都不执行. 一致性: 结果要么都成功 ,要么都失败. 隔离性: 事务之间是互不干扰的 持久性: 事务一旦被提交,对数据库的改变是永久性的. 事务的隔 ...
- scrapy基础知识之 RedisCrawlSpider:
这个RedisCrawlSpider类爬虫继承了RedisCrawlSpider,能够支持分布式的抓取.因为采用的是crawlSpider,所以需要遵守Rule规则,以及callback不能写pars ...
- 西门子S7-1200与 G120系列变频器USS通信
西门子S7-1200 紧凑型PLC在当前的市场中有着广泛的应用,作为经常与SINAMICS G120系列变频器共同使用的PLC,其USS通信协议的使用一直在市场上有着非常广泛的应用.本文将主要介绍如何 ...
- Nginx代理和负载均衡实验
一.构建两个tomcat容器并启动 [root@localhost bin]# ps -ef|grep tomcat root : pts/ :: /usr/bin/java -Djava.util. ...
- 基于SpringCloud的Microservices架构实战案例-配置文件属性内容加解密
使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...
- Spring Boot2(十三):整合定时任务发送邮件
一.前言 主要玩一下SpringBoot的定时任务和发送邮件的功能.定时发送邮件,这在实际生成环境下主要用户系统性能监控时,当超过设定的阙值,就发送邮件通知预警功能.这里只通过简单的写个定时结合邮件通 ...
- HashMap源码分析(二):看完彻底了解HashMap
上文讲到HashMap的增加方法,现在继续 上文链接 HashMap在上一篇源码分析的文章中,如果使用put的时候如果元素数量超过threshold就会调用resize进行扩容 1.扩容机制 想要了解 ...
- 小程序实现图片上传,预览以及图片base64位处理
最近一段时间在做小程序项目,第一期功也完工了.需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑.今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理.下面就是 ...
- javascript之正则表达式(一)
正则表达式:定义一套规则,检查字符串的用的.换句话说,就是记录文本规则的代码.适用于进行文字匹配工具,例如:(1)测试字符串的某个模式(2)替换文本(3)根据模式匹配从字符串中提取一个子字符串.语法: ...
- dijkstra算法学习笔记
dijkstra是一种单源最短路径算法,即求一个点到其他点的最短路.不能处理负边权. 最近某种广为人知的算法频繁被卡,让dijkstra逐渐成为了主流,甚至在初赛中鞭尸了SPFA(? dijkstra ...