本文主要讲解EL表达式语言的作用、基本语法以及运算符。
01、EL的作用
当需要在JSP页面显示变量以及JavaBean对象时,可以使用JSP的表达式,如<%=变量%>的形式,也可以直接使用如<%out.println(变量)%>的Java输出语句。尤其当JSP页面从后台接收较多对参数并显示的时候,此时页面将会混杂大量的Java代码。JSP作为表示层,主要负责内容的显示,如果夹杂过多的Java代码,不利于页面的设计与维护。
因此,在JSP2.0规范中增加了EL(Expression Lanuage,表达式语言),与普通的JSP表达式以及out对象一样,EL可以用于在JSP页面中进行数据的输出显示。此外EL还具备功能强大的运算符功能,可以进行数值以及逻辑运算,能够更为灵活地访问普通变量、JavaBean对象以及集合。相比于Java代码,EL更为直观、简洁,不仅能够减少页面的代码量,也更容易被前端设计人员所理解,方便网页的设计与维护,提高开发效率。
02、EL基本语法
EL的原理与JSP表达式的类似,都是通过JSP容器解释执行后,在浏览器中显示表达式的结果。EL默认是直接在JSP页面中开启的,可以通过page指令的isElIgonred属性设置JSP页面是否能使用EL。isElIgonred的默认值为false,表示开启EL,ture表示关闭。
EL的语法格式为${Expression}。其中,花括号{}里面的表达式可以使用各种运算符,以方便地显示各类数据。假设通过Servlet处理完业务流程后,返回一个商品goods的JavaBean对象,跳转到JSP页面中显示其商品名称,需要使用如下Java代码。
Goods goods=(Goods)request.getAttribute("goods");
String gname=goods. getGname();
out.println("gname");
而如果使用EL,只需要代码如下:
${requestScope.goods.gname}
很显然,使用EL要更加简洁,同时也很容易被理解。
03、EL定义的基本运算符
为了更好地进行数据的读取,EL定义了存取、算数、关系、逻辑、条件、empty等运算符,本文将对这些运算符的使用方法进行介绍。
1. .和[]存取运算符
EL可以使用两种数据读取的运算符:.(点运算符)和[]。第一节使用.运算符对商品名称进行读取,在这里也可以使用[]运算符进行读取。编写代码如下所示。
${requestScope.goods["gname"]}
下面3种情况必须使用[]运算符,而不能使用.运算符。
(1) 属性名称中包含特殊字符的情况。
特殊字符包括数字、横线、下画线等,此时只能使用[]运算符。例如,假设goods有一个属性名称为goods_count,其代码就只能写成如下形式。
${requestScope.goods["goods_count"]}
(2) 属性名称为动态取值的情况。
如果属性名称中包含变量时,就只能使用[]运算符。例如:
String attribute;//attribute可能取值"gname","gprice"或者"gid"
${requestScope.goods[attribute]}
(3) 获取数组中的元素的情况。
假设使用以下语句将定义的数组保存到request中。
String goodsArray[]={"小米10","华为P30","红米K30Pro"};
request.setAttribute("goodsArray",goodsArray);
那么,在JSP页面中只能通过[]运算符依次读取数组中的各元素。
${requestScope. goodsArray [0]}
${requestScope. goodsArray [1]}
${requestScope. goodsArray [2]}
2. 算数运算符
EL定义的算数运算符如表1所示。算数运算符可以进行一些简单的运算比较,进而帮助实现逻辑判断功能。
■ 表1EL定义的算数运算符
3. 关系运算符
EL定义的关系运算符如表2所示。
■ 表2EL定义的关系运算符
在使用两个变量进行关系运算比较时,应采用${变量1==变量2}的形式,而不是${变量1}=${变量2}。
4. 逻辑运算符
EL定义的逻辑运算符如表3所示。
■ 表3EL定义的逻辑运算符
5. 条件运算符
条件运算符的基本语法为${A?B:C},表示当满足条件A时,表达式的值为B;否则,表达式的值为C。例如${2>5?1:0}的值为0。
6. empty运算符
empty运算符用于判断数据是否为空,语法格式如下:
${empty A}
empty运算符的规则:当A的值为null,或者A不存在,或者A为空字符串,或者A为空数组时,均返回为true;否则返回false。