一、简介
最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。
EL表达式定义了一系列的隐式对象和操作符,使得开发人员能够更方便地访问页面上下文,以及不同作用域内的对象。
EL语法如下:
${El表达式}
在JSP页面中我们可以禁用EL表达式,需要配置page指令的isELIgnored属性,属性值若为true则支持EL表达式,若为false则禁用表达式,默认情况下是支持EL表达式的。
二、EL表达式-隐式对象
隐式对象 | 说明 |
pageContext | 当前页面的pageContext对象 |
pageScope | 表示page 作用域 |
requestScope | 表示request 作用域 |
sessionScope | 表示session 作用域 |
applicationScope | 表示application 作用域 |
param | 接收Request 对象的参数(只有一个值) |
paramValues | 接收Request对象的参数(拥有多个值) |
header | HTTP 信息头 |
headerValues | HTTP 信息头值 |
cookie | Cookie值 |
initParam | 取得配置的初始化参数 |
1 . 作用域访问对象
pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。
实例1
${pageScope.name}
如果EL表达式中不指定查找范围,例如:
${name}
Web容器将会自动按照page >> request >> session >> application的顺序查找
2 . 参数访问对象
param和paramValues对象用来访问页面输入参数,通过调用request.getParameter方法和request.getParameterValues方法,可以得到用户的请求参数。
param对象用于得到请求中单一名称的参数;paramValue对象用于得到请求中的多个值
实例1 ELSubmitParam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here
实例2 ELParam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ page isELIgnored="false"%>Insert title here <% request.setCharacterEncoding("UTF-8"); %>用户提交的参数
姓名 : ${param.user }
年龄 : ${param.ages }
运动 : ${paramValues.sport[0] } ${paramValues.sport[1] } ${paramValues.sport[2] }
3 . 其他隐式对象
(1)pageContext对象
pageContext对象是JSP中pageContext对象的引用。
实例1
${pageContext.request.property}取得请求的参数字符串${pageContext.request.requestURL} 取得请求的URL,不包括参数字符串${pageContext.request.contextPath} 服务的web application 的名称${pageContext.request.method} 取得HTTP 的方法(GET、POST)${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)${pageContext.request.remoteUser} 取得用户名称${pageContext.request.remoteAddr} 取得用户的IP 地址${pageContext.session.new} 判断session 是否为新的${pageContext.session.id} 取得session 的ID${pageContext.servletContext.serverInfo} 取得主机端的服务信息
(2)header和headerValues对象
用来读取请求的信息头 。
实例1
${header["UserAgent"]} 获取浏览器的版本信息
(3)cookie对象
读取用户请求中的cookie参数
实例1
${cookie.JSESSIONID.value }
(4)initParam对象
读取设置在web.xml中配置的相关参数。等价于调用application.getInitParameter()或 servletContext.getInitParameter()方法。
三、EL表达式-基本操作符
EL表达式支持大部分Java所提供的算术和逻辑操作符:
. | 访问一个Bean属性或者一个映射条目 |
[] | 访问一个数组或者链表的元素 |
( ) | 组织一个子表达式以改变优先级 |
+ | 加 |
- | 减或负 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
|| or or | 测试逻辑或 |
! or not | 测试取反 |
empty | 测试是否空值 |
注意:
1 . EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。
2. empty 判断EL表达式中的表达式是否为空.
实例1
${empty sessionScope.user}
四、EL表达式-函数
EL表达式语法允许开发人员开发并调用自定义函数,也可以调用 JSTL函数(本篇笔记中不作详细介绍)。
EL函数必须是一个public修饰的类,且EL表达式调用的方法必须是public修饰的且为静态方法。
EL自定义hsh开发步骤如下:
1 . 编写调用自定义函数的类,编写类中具体实现的静态方法
实例1
package cn.iborder.elfn;public class ELfn { public static String elfn1(String name){ return "EL自定义函数"; }}
2 . 建立TLD文件,定义表达式函数
实例1
1.0 el elfn cn.iborder.elfn.ELfn java.lang.String elfn()
3 . 在JSP页面内导入并且使用
实例1
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page isELIgnored="false" %><%@ taglib prefix="el" uri="/WEB-INF/elfn.tld" %>自定义EL函数 ${el:elfn() }