一EL表达式
EL表达式的全名为Expression language,经常与JSTL配合使用,使得JSP页面更直观,写法更简单。
在EL表达式出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入JSP页面中,这会使得页
面看起来很乱,而使用EL表达式则比较简洁。
示例:
在页面中显示保存在session中的变量username,并将其输出到页面中,代码如下:
<%
if(session.getAttribute("username") != null){
out.println(session.getAttribute("username").toString());
}
%>
如果使用EL,则只需一句代码即可实现:
${sessionScope.username}
因此,EL在Web开发中比较常用,通常与JSTL一起使用。
EL表达式除了具有语法简单、使用方便的特点,还有以下特点:
1)EL表达式可以与JSTL结合使用,也可以也JavaScript语句结合使用;
2)EL表达式L中会自动进行类型转换,如果想通过EL输入两个字符串数值(如n1和n2)的和,可以直接通过"+"进
行连接(如${n1+n2});
3)EL表达式不仅可以访问一般变量,还可以访问JavaBean中的属性及嵌套属性和集合对象;
4)EL表达式中可以执行算术运算、逻辑运算、关系运算和条件运算等操作;
5)EL表达式中可以获取命名空间(PageContext对象,他是页面中所有其他内置对象的最大范围的继承对象,通过
他可以访问其他内置对象);
6)在EL表达式中可以访问JSP的作用域(request、session、application、page);
7)在使用EL表达式进行除法运算的时候,如果0作为除数,则返回无穷大Infinity,而不是返回错误;8)扩展函数可以与Java类的静态方法进行映射;
二EL表达式用法
(1)语法结构
EL表达式的语法格式用美元符号$定界,内容包括在花括号{}中。以${开头,以}结束,中间为合法的表达式,具
体语法格式如下:
${expression}
参数说明:
expression:指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。
需要注意的是:
由于EL表达式的语法是以${开头,所以如果在JSP页面中要显示字符串S{,则必须在前面加上"${"或者写
成"${'${'}"。
示例:
在页面中输出字符串“JSP学习”,代码如下:
${'JSP学习'}
(2)保留的关键字
同Java一样,EL也有自己的保留关键字,在变量命名时,应避免这些关键字,包括使用EL输出已经保存在作用域
范围内的变量,也不能使用关键字,如果已经定义了,那么需要修改为其他的变量名。EL表达式中的保留关键字如
下:
如果EL中使用了保留的关键字,那么在Eclipse中,将给出错误提示。如果忽略该提示,直接运行程序,将会出
错。
(3)EL变量
EL表达式存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变
量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查
找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL表达式中的名称:
(4)[ ]与.操作符
EL表达式提供"."和"[]"两种操作符来存取数据。两者通常情况是通用的:${user.sex}或者${user["sex"]}都是允许
的。此外,"[]"还可以用来进行集合元素中的定位:${booklist[0].price}。
以下两种情况是不可以通用的:
1)包含特殊字符
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用"[ ]"。例如:
${ user. My-Name}应当改为${user["My-Name"]}
2)通过变量动态取值:
如果要动态取值时,就可以用"[ ]"来做,而"."无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量。
(5)EL表达式自动类型转换
要取得文本框中的输入,我们需要做类型转换:
String str_count = request.getParameter("count");
int count = Integer.parseInt(str_count);
count = count + 20;
EL表达式会进行自动类型转换,只需要这样写:
${param.count + 20}
(6)EL运算符
运算符允许对数据和文字进行组合以及比较。
EL运算符列表:
1)算术运算符有五个:+、-、*或$、/或div、%或mod
2)关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3)逻辑运算符有三个:&&或and、||或or、!或not
4)其它运算符有三个:empty运算符、条件运算符、()运算符
最常用的表达式:
为空判断:${empty param.name}
三元运算:${A?B:C}
算数运算:${A*(B+C)}
简单实例:
结果:
三EL隐含对象
隐含对象列表:
JSP表达式语言定义了一组隐式对象,pageContext取得其他有关用户要求或页面的详细信息。其中许多对象在
JSP scriplet和表达式中可用:
此外,还提供几个隐式对象,允许对以下对象进行简易访问:
与输入有关的隐含对象有两个:param和paramValues,它们是EL表达式中比较特别的隐含对象。
例如我们要取得用户的请求参数时,可以利用下列方法:
request.getParameter(String name)
request.getParameterValues(String name)
在EL表达式中则可以使用param和paramValues两者来取得数据。
${param.name}
${paramValues.name}
其他隐含对象的具体用法可以参考手册。
除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页
面:
在EL表达式中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相
关信息。
例如:我们要取得session中储存一个属性username的值,可以利用下列方法:
session.getAttribute("username")
在EL表达式中则使用下列方法:
${sessionScope.username}
四EL函数
EL函数的语法如下:ns:function( arg1, arg2, arg3 …. argN)
其中ns为前置名称(prefix),它必须和taglib指令的前置名称一样。前置名称都为my,至于function为EL函数的
名称,而arg1、arg2等等,都是function的传入值。
EL函数主要分为四个部分
1)web.xml配置文件:设定taglib的TLD文件位置
2)JSP页面:使用EL函数的JSP页面
3)tld文档:EL函数、标签库的设定文件
4)Java源文件:EL函数主要程序逻辑处理部分
这四个部分环环相扣,都互有关系。我们将在范例中详细描述这四个部分的制作过程。
由于目前还没有使用到过,就不再进行举例说明了。