欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP详细篇——EL表达式(一)

程序员文章站 2022-06-22 13:46:00
EL表达式 EL表达式概述 在EL表达式出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入JSP页面中,这会使得页面看起来很乱,而使用EL表达式则比较简...

EL表达式

EL表达式概述

在EL表达式出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入JSP页面中,这会使得页面看起来很乱,而使用EL表达式则比较简洁。

范例:

在页面中显示保存在session中的变量username,并将其输出到页面中,代码如下:

<%

if(session.getAttribute(“username”) != null){

out.print(session.getAttribute(“username”).toString();

}

%>

如果使用EL,则只需一句代码即可实现

${username}

 

因此,EL在Web开发中比较常用,通常与 JSTL一起使用。

1、EL的基本语法

EL表达式语法:以${开头,以}结束,中间为合法的表达式,具体语法格式如下:

${expression}

参数说明:

Expression:指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。

 

PS:

由于EL表达式的语法是以${开头,所以如果在JSP页面中要显示字符串S{,则必须在前面加上。即”${” .或者写成“${‘${’}” .

范例:

在页面中输出字符串“JSP学习”,代码如下:

${‘JSP学习’}

 

 

2、EL的特点

 

EL除了具有语法简单、使用方便的特点,还有以下特点:

A、EL可以与JSTL结合使用,也可以也JavaScript语句结合使用

B、EL中会自动进行类型转换,如果想通过EL输入两个字符串数值(如n1和n2)的和,可以直接通过“+”进行连接(如${n1+n2})

C、EL不仅可以访问一般变量,还可以访问JavaBean中的属性及嵌套属性和集合对象

D、EL中可以执行算术运算、逻辑运算、关系运算和条件运算等操作

E、EL中可以获取湖区命名空间(PageContext对象,他是页面中所有其他内置对象的最大范围的继承对象,通过他可以访问其他内置对象)

F、在EL中可以访问JSP的作用域(request、session、application、page)

G、在使用EL进行除法运算的时候,如果0作为除数,则返回无穷大Infinity,而不是返回错误

H、扩展函数可以与Java类的静态方法进行映射

 

与低版本环境兼容—禁用EL

只要安装的Web服务器能支持Servlet2.4/JSP2.0,就可以在JSP页面中使用EL。由于在JSP2.0之前的版本中没有EL,所以JSP为了和以前的规范兼容,还提供了禁用EL的方法。JSP中提供3中方法禁用EL,分别介绍如下。

 

1、使用斜杠“”

 

使用斜杠是一种比较简单的禁用EL的方法。该方法只需要在EL的起始标记“${”前加上“”。具体语法格式如下:

${expression}

PS:

该语法格式只使用在禁用页面中的一个或几个EL表达式的情形

2、使用page 指令

使用JSP的page指令可以禁用EL表达式,具体语法格式如下:

<%@page isELIgnored=“布尔值”%>

参数说明:

isELIgnored:用于指定是否禁用页面的EL,如果属性值为true,则忽略页面中的EL,否则将解析页面中的EL

范例:

<%@page isELIgnored=”true”%>

 

PS:

该方法适用于禁用一个JSP页面中的EL

 

3、在web.xml中配置元素

 

在web.xml中配置元素可以实现禁用服务器中的EL。

范例:

jsp-config>

*.jsp

true

 

 

 

PS:

该方法使用于禁用Web应用中的所有的JSP页面中的EL

 

保留的关键字

同Java一样,EL也有自己的保留关键字,在变量命名时,应避免这些关键字,包括使用EL输出已经保存在作用域范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其他的变量名。EL中的保留关键字如下:

and

eq

gt

instanceof

p

or

le

false

empty

not

lt

ge

如果EL中使用了保留的关键字,那么在Eclipse中,将给出错误提示。如果忽略该提示,直接运行程序,将会出错。

 

EL的运算符和优先级

EL可以访问数据运算符、算数运算符、关系运算符、条件运算符及empty运算符等。各运算符的优先级如下:

 

运算符的优先级决定了在多个运算符同时存在的时候,各个运算符的求职顺序,对于同级别的运算符采用从左到右的顺序进行计算。

PS:

使用()可以改变优先级。在复杂的表达式中,使用括号可以使得表达式更容易阅读和避免出错。

1.通过EL访问数据

 

通过EL提供的“[]”和“,”运算符可以访问数据。通常情况下,“[]”和“.”运算是等价的,可以相互代替。

范例:

访问JavaBean中的userInfo的id属性,可以写成以下两种形式:

${userInfo.id}

${userInfo[id]}

但是也不是所有的情况下都可以相互替代,例如,当对象的属性名中包含一些特殊的符号(-或.)时,就只能使用“[]”运算符来访问对象的属性。例如:${userInfo[user-id]}是正确的,而${userInfo.user-name}则是错误的。另外,EL的“[]”运算符还有一个用途,就是用来获取数组或List集合中的数据。

数组元素的获取:

应用“[]”运算符可以获取数组的指定元素,但是“.”不能

范例:

获取request范围中的数组arrBook中的第一个元素,可以使用下面的EL表达式:

${arrBook[0]}

范例:

编写array.jsp,该文件中,首先包含一个3元素的以为数组,并赋值,然后通过for循环和EL输出数组中的元素

<%@ page language=java import=java.util.* pageEncoding=UTF-8%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;

%>

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

<%

String[] arr = {Java,JSP,MySQL};//定义一维数组

request.setAttribute(book,arr);//将数组保存在request对象中

%>

<%

String[] arr1 = (String [])request.getAttribute(book);//获取保存在request范围内的对象

//通过循环和EL输出一维数组的内容

for(int i = 0 ; i < arr1.length ; i++){

request.setAttribute(requestI, i);//将循环变量i保存在request范围内的变量中

%>

${requestI }:${book[requestI] }

<%

}

%>

 

 

 

 

List集合元素的获取

应用“[]”运算符还可以获取List集合中的指定元素,但是“.”不行

范例:

session中保存一个包含3个元素的List,并用EL输出

<%@ page language=java import=java.util.* pageEncoding=UTF-8%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;

%>

 

 

 

 

 

>

 

 

 

 

 

 

 

 

 

 

 

 

<%

List list = new ArrayList();//声明一个List集合对象

list.add(饼干);

list.add(牛奶);

list.add(面包);

session.setAttribute(goodsList, list);//将List保存到session中

%>

<%

List list1 = (List)session.getAttribute(goodsList);//获取保存在session中的对象

for(int i = 0 ; i < list1.size() ; i++){

session.setAttribute(sessionI, i);

%>

${sessionI } : ${goodsList[sessionI] }

<%

}

%>

 

 

 

 

2.在EL中判断对象是否为空

 

在EL中,判断对象是否为空,可以通过empty运算符实现,该运算符是一个前缀运算符,即empty运算符位于操作数的前方,用来确定一个对象是否为null或空。Empty运算符的格式如下:

${empty.expression}

范例:

定义两个request范围内的变量user,user1,分别数值为null和“”.

<%request.setAttribute(“user”,””);%>

<%request.setAttribute(“user1”,null);%>

然后通过empty运算符判断user,user1是否为空

${empty user} //返回true

${empty user1} //返回true

 

另外,empty运算符也可以与not运算符结合使用,判断一个对象或变量是否为空。

范例:

<%request.setAttribute(“user”,””);
${not empty user} //返回值为false

 

3.EL中的逻辑关系运算

 

在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。关系运算符用于实现两个表达式的比较,进行比较的表达式可以是数值型也可以是字符串。而逻辑运算符则常用于对Boolean类型的数据进行操作。逻辑运算符和关系运算符经常一起使用。

范例:

在判断考试成绩时,可以用下面的表达式判断60到80分的成绩

成绩>60 and 成绩<80

 

 

关系运算符

在EL中,提供了6中关系运算符。关系运算符的使用格式如下:

运算符

功能

示例

==或eq

等于

${10==10}/${10 eq 10}

!=或ne

不等于

${10!=10}/${“A” ne “A”}

<或lt

小于

${7<6}/${“A” lt “B”}

>或gt

大于

${7>6}/${“A” gt “B”}

<=或le

小于等于

${“A” <= “A”}

>=或ge

大于等于

${7>=6}/${7 ge 6}

 

 

逻辑运算符

 

 

 

在EL中进行条件运算

语法格式:

${条件表达式?表达式1:表达式2}

参数说明:

条件表达式:用于指定一个条件表达式,该表达式的值为Boolean型。可以由关系运算符、逻辑运算符和empty运算符组成

 

表达式1:用于指定当条件表达式的值为true时,将要返回的值

 

表达式2:用于指定当条件表达式的指为false时,将要返回的值

 

范例:应用条件运算符实现放变量cart的值为空时,输出“cart车为空”,否则输出cart的值。

${empty cart ? ”cart为空” : cart}

通常情况下,条件运算符可以用JSTL中的条件标签代替