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)的更多相关文章

  1. 【jsp】详解JSP表达式语言(EL)

    一.JSP EL语言定义 E L(Expression Language)  目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 ...

  2. JSP 表达式语言

    JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP EL表达式内可以使用整型数,浮点 ...

  3. JSP表达式语言(EL)

    JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP  EL既可以用来创建算术表达式也可以用来创建逻辑表达式.在JSP  EL表达式内可以使用整数型.浮点型.字符串.常量 ...

  4. 表达式语言EL

    表达式语言EL 表达式语言 EL(Expression Language,表达式语言)主要是用在JSP页面中,用来辅助我们产生无脚本的JSP页面,此处的脚本指的是JSP中的Java代码. EL的语法是 ...

  5. 表达式语言EL简单学习

    Jsp2.0最重要的特性就是表达式语言EL.jsp用户可以用它来访问应用程序数据. EL表达式以${开头并以}结束. ${expresion}     ${x+y} 它也常用来连接两个表达式,取值将从 ...

  6. JSP-Runoob:JSP 表达式语言

    ylbtech-JSP-Runoob:JSP 表达式语言 1.返回顶部 1. JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建 ...

  7. 06.十分钟学会表达式语言EL

    一. 概念:MVC设计模式一个主要好处就是让jsp中的代码越来越来少,而且规定只能出现三种代码:接收属性,判断语句,迭代输出.但是,在开发中,jsp输出至少还是需要接受VO对象的,这时候为了避免导入V ...

  8. Java EE之表达式语言EL(上)

    1.了解表达式语言 表达式语言(EL)用于在不使用脚本.声明或者表达式的情况下,在JSP页面中渲染数据. EL曾是JSTL 1.0规范(与JSP 1.2)中的一部分,并且只可以用作JSTL标签的特性. ...

  9. Java EE之表达式语言EL(下)

    1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...

随机推荐

  1. restapi(0)- 平台数据维护,写在前面

    在云计算的推动下,软件系统发展趋于平台化.云平台系统一般都是分布式的集群系统,采用大数据技术.在这方面akka提供了比较完整的开发技术支持.我在上一个系列有关CQRS的博客中按照实际应用的要求对akk ...

  2. mysql 安装使用

    本节掌握内容: MySQL的介绍安装.启动 windows上制作服务 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 O ...

  3. C语言实现—学生成绩管理系统(Linux下运行)

    开发环境:Linux 开发语言:C 相关文件下载: 码云:https://gitee.com/ikaros-521/c_project/tree/master/%E5%AD%A6%E7%94%9F%E ...

  4. idea-Java文件结构

    从项目目录来看 ,分级为project-module-package-classname.java 其中.java文件中包含至多一个publicclass.class文件和多个普通.class文件 . ...

  5. 简单说一下SS的原理

    假设有主机A和B还有C.主机A是客户机,就是你的电脑,主机B是服务器,也就是位于日本的那台电脑.主机C是你需要访问的网站.在没有SS的情况下,数据传输的流程是:A-->C.在有SS的情况下,概括 ...

  6. Java 新特性总结——简单实用

    lambda表达式 简介 lambda 表达式的语法 变量作用域 函数式接口 内置函数式接口 默认方法 Stream(流) 创建 stream Filter(过滤) Sorted(排序) Map(映射 ...

  7. druid一步到位

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 在配置application.yml文件的时候,原本写的是MySQL的连 ...

  8. CF39D Cubical Planet-C++

    银河系中没有你找不到的东西!有一颗形状为立方体的的行星正在绕着一颗形状为二十面体的恒星运转.现在我们让这颗行星的两个在同一条体对角线上的顶点置于(0,0,0)和(1,1,1)上.有两只苍蝇住在行星上. ...

  9. 【Download error:TOO MANY REQUESTS】&【TypeError:excepted string or buffer】

    <用python写网络爬虫>,1.4.4链接爬虫,运行时,遇到错误: Download error:TOO MANY REQUESTS Traceback(most recent call ...

  10. Excel催化剂开源第16波-VSTO开发之脱离传统COM交互以提升性能

    在VSTO开发或其他COM技术开发过程中,甚至VBA也是,在和Excel交互中,难免会遇到性能瓶颈问题,COM技术的交互实在太慢,对大量数据读写等操作,耗时太长,容易卡用户界面以为是程序死机等等. 在 ...