一、简介
最初定义在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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action='ELParam.jsp' method='post'>
姓名:<input type='text' name='user' /><br />
年龄:<input type='text' name='ages' /><br />
<label for='football'>足球</label><input type='checkbox' name='sport' id='football' value="football"/>
<label for='swimming'>游泳</label><input type='checkbox' name='sport' id='swimming' value="swimming"/>
<label for='run'>步行</label><input type='checkbox' name='sport' id='run' value="run"/><br />
<input type='submit' value='提交' />
</form>
</body>
</html>
实例2 ELParam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
%>
<h2>用户提交的参数</h2>
<p>姓名 : ${param.user }</p>
<p>年龄 : ${param.ages }</p>
<p>运动 : ${paramValues.sport[0] } ${paramValues.sport[1] } ${paramValues.sport[2] }</p>
</body>
</html>
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
<?xml version="1.0" encoding="GBK"?>
<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">
<!-- 定义函数版本 -->
<tlib-version>1.0</tlib-version>
<!-- 定义函数名称 -->
<short-name>el</short-name>
<!-- 定义第一个函数 -->
<function>
<name>elfn</name>
<function-class>cn.iborder.elfn.ELfn</function-class>
<!-- 定义函数的对应方法 -->
<function-signature>
java.lang.String elfn()
</function-signature>
</function>
</taglib>
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" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>自定义EL函数</title>
</head>
<body>
<h1>${el:elfn() }</h1>
</body>
</html>