EL(Expression Language,表达式语义),它提供了Web网页和JavaBean管理进行通信的重要机制,简化了JSP开发中对象的引用,从而规范页面代码,增加了程序的可读性和可维护性。EL提供了获取对象及属性的简单方式,支持简单的运算。
1、EL基本语法
语法格式:
${expression} //expression为要输出的内容,可以使字符串或表达式
EL禁用
在低版本及JSP 2.0以前的版本不支持EL,为了兼容低版本,可以禁用EL,共三种方法。- 禁用一行EL,使用"\",语法格式如下:\${expression};
- 禁用一个JSP页面的EL,使用JSP的表示指令page,语法格式如下:<%@ page isELIgored = "true"%>
- 禁用一个应用程序的EL,在web.xml配置中禁用,其代码如下:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp<url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> <jsp-config>
EL访问数据的方式:通过 . 和 []来访问数据,通常情况下二者等价,但当属性中包括一些特殊符号时只能使用[]来访问对象的属性。例如:${userInfo.user-id}是错误的,${userInfo[user-id]}是正确的。另外[]可以用来访问数组或者List集合。
在EL中判断对象是否为空,其语法结构:
${empty expression} //expression为空返回true,反之返回false
2、EL隐含对象
EL提供了11个隐含对象,类似如JSP的内置对象,可以直接通过对象名进行操作,分为三个大类页面上下文对象、访问作用域的隐含对象和访问环境信息的隐含对象。
- pageContext对象,属于页面上下文对象,用于访问JSP部分内置对象(Request、Response、out、session、exception、page),其他JSP内置对象不能被其访问。在获得JSP内置对象后,即可获得其属性值。
- pageScope对象,属于访问作用域隐含对象,用于返回page范围内的属性值的集合。
- requestScope对象,属于访问作用域隐含对象,用于返回包含request范围内的属性值的集合。
- responseScope对象,属于访问作用域隐含对象,用于返回包含response范围内的属性值的集合。
- sessionScope对象,属于访问作用域隐含对象,用于返回包含session范围内的属性值的集合。
- applicationScope对象,属于访问作用域隐含对象,用于返回包含request范围内的属性值的集合。
- param对象,属于访问环境信息的隐含对象,用于获取请求参数的值,应用在参数值只有一个的情况下。
- paramValues对象,属于访问环境信息的隐含对象,用于获取请求参数的值,应用在参数名对应多个值的情况下。
- header和headerValues对象,属于访问环境信息的隐含对象,当获取HTTP请求的一个具体header的值时使用header对象,当同一个header对象对应多个不同的值时使用headerValues对象。
- initParam对象,属于访问环境信息的隐含对象,用于获取Web应用初始化参数的值。
- cookie对象。
3、定义和使用EL函数
定义和使用EL函数的三个步骤:
- 编写Java类,并编写公共的静态方法,用于实现自定的EL函数的具体功能;
- 编写标签库描述文件声明函数,该文件扩展名为“.tld”,保存在WEB-INF文件夹下。
- 在JSP页面中引用标签库,并调用定义的EL函数实现相应的功能。
示例stringDeal.tld文件如下:
<?xml version="1.0" encoding="utf-8"?>
<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/j2eeweb-jsptaglibrary_2_o.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<uri>/stringDeal</uri>
<function>
<name>shiftEnter</name>
<function-class>com.wgh.StringDeal</function-class>
<function-signature>java.lang.String shiftEnter(java.lang.String)</function-signature>
</function>
</taglib>
<uri>标记:用于指定tld文件的映射路径,在应用EL函数时需要使用该标记指定的内容。
<name>标记:用于指定EL函数所对应的静态方法名,与Java文件中的方法名相同。
<function-class>标记:用于指定EL函数所对应的Java文件,文件要求完整路径。
<function-signature>标记:用于指定EL函数多对应的静态方法,其中包括返回值和参数的完整类型。
使用自定义的EL函数的JSP页面中:
...//代码省略
<%@ taglib prefix="wgh" uri="/stringDeal"%>
...//代码省略
${wgh:shiftEnter(param.content)}