JSP中的EL表达式(2)

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

true

PS:

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

保留的关键字

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

and

eq

gt

instanceof

div

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中的条件标签或代替

你可能感兴趣的:(JSP)