概念和特性
EL表达式语言原先只是用JSTL(Java Standard Tag Lib)中的存取数据的一种语言,随着WEB2.0的到来 它才被真正归入到JSP的标准规范中.现在EL也可以在JSP页面中直接使用,但是所提供的服务器必须是支持JSP2.0/SERVLET2.4的.
EL和其他的语言一样都具有一般计算机语言的特征.有自己的语法格式,特有符号,支持关系运算 数学运算和逻辑处理.但是做为在JSP技术一员,它还有以下特点:
★ 可以在JSP语句或者JavaScript脚本语句中使用EL.
★ 可以获得pageContext隐含对象,并且可以通过它来引用其他隐含对象.
★ 可以访问一些变量,JAVABEAN类的属性或嵌套属性和集合对象.
★ 可以直接访问JSP中的所有隐含对象.
语法格式
1
.所有的EL表达式都是以"${" 开始,以"}" 结尾的 如:
变量: String username="Lionest";
表达式:${username} 的值就是"Lionest"
如果在EL表达式中没有指定要查找变量的范围,则JSP容器会先从 page范围开始找,然后是 request ,session,application .直到找到为止,否则直接返回null.
2
.在EL中,使用到的变量作用范围名称是在变量作用范围+"scope" 如, ${pageScope.x} 表示在page范围的x变量的值 ,同样也可以有 requestScope ,sessionScope,applicationScope.
3
.EL中可以使用以下几种类型:
Boolean:
true , false 如 ${true}
String:
由单引号或者双引号限定的字符串,如遇到单引号或双引号,反斜杠时 可以用"/"放在前面做为转义符.
如:%{"Lionest"} ,${/"} ,${//}
Integer:
正整数或者负整数 如:${21} ,${-2}
Float Point:
所有正的或负的浮点数. 如: ${-1.445} ,${1.18e}
Null:
直接返回null
4.EL中的运算符
" [ ] " 和" . "
(1)这两个运算符是用来获得变量的属性值, 如 : ${user.name} ${user[name]} 返回值都是一样的.
(2)在所引用的变量的属性中带有特殊字符的 如; " _" ," %"," ^ ",就要使用" [] "运算符 如: ${user[id_addr]}
(3) " [ ] " 运算符还可以读取Map ,List ,Array 等集合中的值:
如: int[] numbers={1,2,3,4,5,6,7};
表达式:${numbers[0]} 的值就是 "1"
${numbers[3]} 的值就是 "4"
(4) 还有一种情况也要必须使用 " [ ] " ,而非" ." 当所引用的变量的属性本身就是一个变量时:
如: String id="lionest";
${user[id]}
应用实例
我们这里只说一下难度较深的EL如何使用隐含对象和调用自定义函数 ,其他的简单的关系运算和数学,逻辑处理等.
在EL中 定义了11个隐含对象(JSP中是9个) ,其中JSP和EL共有一个对象那就是无所不能的pageContext对象.
下面介绍一下这些对象,
类别
对象名 描述
--------------------------------------------------------------------------------------------------------------------------------------------
JSP pageContext 当前JSP页面的Javax.servlet.jsp.PageContext对象
作用域 pageScope 页面范围内所有对象的集合
requestScope 所有请求范围内对象的集合
sessionScope 所有会话范围内对象的集合
applicationScope 整个WEB应用内对象的集合
请求参数 param 所有请求参数字符串组成的集合
paramValues 所有作为字符串集合的请求参数
请求头 header HTTP请求头部,字符串
headerValues HTTP请求头部,字符串集合
cookie cookie 所有cookie组成的集合
初始化参数 initParam 全部应用参数名组成的集合
---------------------------------------------------------------------------------------------------------------------------------------------
EL中可以调用以上对象的方法和属性进行相应的数据处理.
最后介绍一下 ,EL中如何调用自定义函数.
首先要创建一个自定义函数类,和JAVABEAN有毫象,此类的方法必须是公开的,静态的:
example
public class Convert{
pirvate String result="";
public static String convert(String str) {
result=new String(str.getBytes("utf-8"),"GBK")
return result;
}
}
这是一个字符编码转换的一个类,它只有一个静态方法,是为了能不创建其对象就可以引用它.
然后再定义一个tld文件.和自定义标签差不多.
<?xml version="1.0" encoding="GB2312"?>
<!--
Document : convert.tld Created on : 2007/7/30
Author :
Description:
Purpose of the document follows.
-->
<taglib xmlns="
http://java.sun.com/xml/ns/j2ee
"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
"
xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd
"
version="2.0">
<description>Convert String </description>
<display-name>Convert function</display-name>
<tlib-version>1.1</tlib-version>
<short-name>convert</short-name>
<uri>http://java.sun.com/jsp/jstl/convert</uri>
<function>
<description>将字符串转换成中文编码</description>
<name>convert</name>
<function-class>Convert</function-class>
<function-signature>java.lang.String convert(java.lang.String)</function-signature>
<example>
${Convert:convert("加油!你是最棒的")}
</example>
</function>
</taglib>
把这个tld文件放在自定义标签的文件中,通常在 WEB_PROJECT/WEB-INF/tlds下.然后建立一个JSP页面进行测试
test.jsp
<% @ page c %>
<% @ page isELIgnored="false"%>
<% @ taglib prefix="convert" uri=
http://java.sun.com/jsp/jstl/convert
%>
<html>
<head>
<title>Test the Function</title>
</head>
<body bgcolor="#FFFF00">
Before :${"客官打尖还是住店?"}
After: ${convert:convert("客官打尖还是住店?")}
</body>
</html>
打开IE浏览器 运行该页面就会看到结果.
Before :(后面是乱码)
After: (后面则是) 客官打尖还是住店?