EL表达式语言


EL表达式语言

JSP用于在页面上显示动态内容,通常需要在JSP页面中嵌入Java脚本以完成复杂功能。但大量的Java脚本使得JSP页面难以维护。一种类似JavaScript语言—EL表达式(JSP表达式语言)可用于在网页上生成动态内容,并代替JSP脚本元素。JSP表达式语言是从JSP 2.0规范开始支持的技术。

EL表达式全称为Expression Language。是JSP技术的主要特点之一。Java社区组织(JCP,Java Community Process)的JSP标准标签库专家组合JSP 2.0专家组共同开发了JSP表达式语言。JSP表达式语言的语法如下:

${EL expression}

其中: $表示EL中表达式的开始;{ 是起始分隔符;EL expression 指定表达式。;} 是结束分隔符。

JSP页面通常包含HTML文本,JSP标准动作和JSP自定义标签。EL表达式可用于所有HTML和JSP标签中。

EL表达式可用于如下几种方式,我们现在来简要了解一下。

8.1.1  静态文本

包含EL表达式,其值在运行时计算出来。求值后,EL表达式被计算值替换。

我们通过一个例子来看看,代码如例8.1所示。

<%@ page language="java" contentType="text/html;   charset=UTF-8"

pageEncoding="UTF-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>EL表达式 静态文本</title>

</head>

<body>

<h1>EL表达式 表达式例</h1>

<table border="1">

<tr>

<th>运算</th>

<th>EL表达式</th>

<th>结果</th>

</tr>

<tr>

<td>与</td>

<td>\${true and true}</td>

<td>${true and true}</td>

</tr>

</table>

</body>

</html>

例8.1

注意:JSP会把${xxx}的内容都认为是EL表达式,里边的内容都会被计算,那么,如果我们只是想输出${xxx}的字符串的话,那么就需要把${xxx}转义。转义有两种方式,一种就如上例一样,在${xxx}前加上\,即\${xxx}。另一种的写法如${'${'}xxx}表示xxx会包含在${}中并作为一个字符串表示。

显示结果如图8.1所示。

图8.1

上例显示EL表达式${true and true}判断true and true的结果是true。

下面,我们来演示如何在HTML标签的静态文本中使用EL表达式。代码如例8.2所示。

<%@ page language="java" contentType="text/html;   charset=UTF-8"

pageEncoding="UTF-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>EL表达式 静态文本例</title>

</head>

<body>

<h2>商品价格是${84.5E4}。</h2>

</body>

</html>

例8.2

执行结果如图8.2所示。

图8.2

8.1.2  标签和自定义标签属性

JSP页面中可以使用JSP自己的标准标签,也可以使用HTML标签(如<body>等),还可以使用自定义标签(由用户使用taglib指令编写)。我们可以通过EL表达式设置其相关属性。

我们通过一个例子来说明,我们通过EL表达式来设置<body>标签的bgcolor属性。代码如例8.3所示。

<%@ page language="java" contentType="text/html;   charset=UTF-8"

pageEncoding="UTF-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>控制body标签属性</title>

</head>

<%

//   pageContext中设置一个属性color为red

pageContext.setAttribute("color", "red");

%>

<!-- 从pageContext中取出color属性 -->

<body bgcolor="${pageScope.color}">

你好!

</body>

</html>

例8.3

执行结果如图8.3所示,我们设置了页面的背景色为红色。

图8.3

8.1.3  JavaBean中使用EL表达式

我们在上一章学习了JavaBean的使用,在使用<jsp:getProperty>读取JavaBean的属性值的时候,我们以前学的一般用如下两种写法来实现。

<jsp:getProperty name="userBean" property="name"/>

<%=userBean.getName()%>

现在,我们通过EL表达式可以更轻松的完成这项工作。我们通过下边这个例子来体验一下,我们的JavaBean仍然使用第五章5.3.3<jsp:setProperty>中的UseBean类,而发送参数的html也仍然用那一节的senduser.html,代码如例8.4所示。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>使用UserBean_传递参数</title>

</head>

<body>

<form name="main" action="user.jsp" method="post">

编号:<input type="text" name="myid"/>

<br>

姓名:<input type="text" name="myname"/>

<br>

<input type="submit" value="传送参数"/>

</form>

</body>

</html>

例8.4

我们只是来修改user.jsp,代码如例8.5所示。

<%@ page language="java" contentType="text/html;   charset=UTF-8"

pageEncoding="UTF-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>使用UserBean_显示参数</title>

</head>

<body>

<%

// 设置获得参数用的编码

request.setCharacterEncoding("UTF-8");

%>

<jsp:useBean id="userBean" class="com.jy.sample.javabean.UserBean" scope="page"/>

<!-- 通过自省机制设置属性 -->

<jsp:setProperty property="id" name="userBean" param="myid"/>

<jsp:setProperty property="name" name="userBean" param="myname"/>

<!-- 显示属性值 -->

编号:${userBean.id}<br>

名称:${userBean["name"]}

</body>

</html>

例8.5

执行senduser.html,结果如图8.4所示。

图8.4

点击传送参数按钮以后,结果如图8.5所示。

图8.5

我们现在知道,EL表达式有两种写法可以获取JavaBean中的属性,如下所示,两种写法的执行结果是一样的。

${userBean.id}

${userBean["name"]}

8.2  变量的获得

变量用于存储和访问JSP页面中的值。默认情况下,JSP表达式${product}的计算结果与调用pageContext.findAttribute(“product“)一样。EL表达式中的变量可以引用存储在标准范围(如page、request、session和application范围)中的属性。

变量在标准范围中的搜索顺序是page、request、session和application。如果需要,可以使用toString()方法将变量的返回值转换成字符串。如果找不到变量,则返回null值。点运算符(.)用于获取变量的值。除了点运算符(.)外,还可以使用“[ ]”。

8.3  EL运算符

EL表达式的运算符很多,主要分如下几类:

  • 算术运算符

运算符

说明

范例

结果

+

${17+5}

22

-

${17-5}

12

*

${17*5}

85

/或div

${17/5}或${17div5}

3

%或mod

余数

${17+5}或${17mod5}

2

  • 关系运算符

运算符

说明

范例

结果

==或eq

等于

${5==5}或${5 eq 5}

true

!=或ne

不等于

${5!=5}或${5 ne 5}

false

<或lt

小于

${3<5}或${3 lt 5}

true

>或gt

大于

${3>5}或${3 gt 5}

false

<=或le

小于等于

${3<=5}或${3 le 5}

true

>=或ge

大于等于

${3>=5}或${3 ge 5}

false

  • 逻辑运算符

运算符

说明

范例

结果

&&或and

${A&&B}或${A and B}

true/false

||或or

${A||B}或${A or B}

true/false

!或not

${!A}或${not A }

true/false

  • Empty运算符:${empty param.name},当param.name为null、空String、空Array、空Map、空Collection时,返回true;其他返回false。
  • 条件运算符:${A?B:C},当A为true时,执行B;当A为false时,执行C。
  • 括号运算符:主要用来改变执行优先权,如${A*(B+C)}。

在这里,对于运算符的使用,我们不再举例,因为当使用框架以后,使用的几率并不大,而且EL表达式主要用途还是获得值并表示。例如struts2的2.16版本的struts2标签不支持EL表达式,而不使用struts2标签则可以使用EL表达式。

8.4  禁用EL表达式

EL表达式包含在符号“${”与“}”之间。例如,${4*8}是一个EL表达式。在Java服务器技术中,不再保留“${”与“}”符号作为EL表达式的专用符号。执行表达式时,JSP容器可能将大括号视为循环的起始括号而现实错误,或得出错误的输出结果。因此,有时需要使用isELIgnored属性禁用EL表达式。

在这里,值得注意的是:Servlet 2.3规范未定义EL表达式,因此在JSP 1.2中默认是禁用EL表达式,如果在符合Servlet 2.3规范的JSP页面中使用EL表达式,将被忽略。Servlet 2.4定义了EL表达式的模式,而JSP 2.0中默认启用JSP EL表达式。

在JSP页面中禁用EL表达式计算的语法如下:

<%@page isELIgnored=”true|false”%>

其中,page表示页面指令,isELIgnored确定时否应忽略对EL表达式进行计算。

如果isELIgnored设置为true,当EL表达式在静态文本或标签属性中出现时将被忽略;如果isELIgnored设置为false,EL表达式则由JSP容器进行计算。

8.5  总结

  • EL表达式的语法:以“${”开始,以“}”结束
  • 使用EL表达式,主要目的可以实现JSP中无脚本编程,从而提高项目的可维护性和可扩展性

13EL表达式语言的更多相关文章

  1. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

  2. Spring学习记录(七)---表达式语言-SpEL

    SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...

  3. Spring学习总结(四)——表达式语言 Spring Expression Language

    SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...

  4. 表达式语言EL

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

  5. JavaWeb学习笔记——表达式语言

    使用表达式语言,可以方便地访问标志位(JSP中有page(pageContext).request.session和application4种标志位)中的属性内容,可以避免出现许多的Scriptlet ...

  6. Spring3系列6 - Spring 表达式语言(Spring EL)

    Spring3系列6-Spring 表达式语言(Spring EL) 本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.S ...

  7. Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)

    5.1  概述 5.1.1  概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...

  8. Struts2笔记——ONGL表达式语言

    OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...

  9. 表达式语言之ongl表达式

    OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方 ...

随机推荐

  1. 中国第二代身份证验证js代码

    以下这部分代码截取自盛大的某个网页.详细我就不给url了.以下是相应的js代码: iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); iSum ...

  2. 仰视源代码,实现strcmp

    //这是系统库的实现 int strcmp(const char* src, const char* dest) { int rtn = 0; while(!(rtn = *(unsigned cha ...

  3. 【bzoj4538】[Hnoi2016]网络

    我们考虑树剖,线段树上维护一个堆,保存不经过该段区间的路径的权值. 对于一条路径我们将对于线段树中的区间提取出来,在对于线段树中进行修改.也就是在堆中插入或删除. 对于一次询问,只要找到包含该点的线段 ...

  4. A Go library implementing an FST (finite state transducer)——mark下

    https://github.com/couchbaselabs/vellum Building an FST To build an FST, create a new builder using ...

  5. 【转】Material Design 折叠效果 Toolbar CollapsingToolbarLayout AppBarLayout

    我非常喜欢Material Design里折叠工具栏的效果,bilibili Android客户端视频详情页就是采用的这种设计.这篇文章的第二部分我们就通过简单的模仿bilibili视频详情页的实现来 ...

  6. HTTPS数据包抓取的可行性分析

    HTTPS数据包抓取的可行性分析 相信只要是从事软件开发, 多多少少都会涉及到数据包的抓取.常见的有网页数据抓取(即网页爬虫),应用程序数据包抓取等.网页数据抓取比较简单, 在chrome下可以非常方 ...

  7. ZOJ3962 2017 E.Seven Segment Display

    数码管从某个状态顺序转移N个状态 计算总共有多少个数码管被点亮 N<=10^9 观察数码管的变化规律,有明显的周期和重复,利用这个性质,计算相对于初始状态,某一位上的某个状态重复了多少次,就可以 ...

  8. bzoj4237 稻草人——分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4237 分治: 先把所有点按 y 排序,然后二分递归: 对于每个 mid ,计算经过它的矩形的 ...

  9. 使用Java实现图像分割

    为减少动画制作过程中的IO操作,我们可以使用连续动画来改善动画播放效率.如果我们对图像中的每张小图像单独分割成独立的文件,那么当每次要使用这些小图像的时候,我们都得从文件中读取图像信息. 实际上我们可 ...

  10. Ubuntu 14.04 台式机锐捷使用:

    1.解压文件:RG_Supplicant_For_Linux_V1.31.zip2.sudo chmod -R 777 rjsupplicant3.进入文件夹(./rjsupplicant.sh -a ...