EL 表达式
1.语法结构
EL表达式用${表达式}表示
2.<%@ page isELIgnored="true"%> 表示是否禁用EL语言,
TRUE表示禁止.
FALSE表示不禁止.JSP2.0中默认的启用EL语言.
3.[]与.运算符
EL 提供.和[]两种运算符来存取数据。
1.当存取的属性名称不是全数字或者全字母的只能用[]
例如:
${user.My-Name}应当改为${user["My-Name"] }
2.当存取的属性名称要动态操作时只能用[]
例如:
${sessionScope.user[data]}中data 是一个变量
3.其他的用方括号[]或者.都可以
4.EL表达式可操作
4.1.常量
4.2.变量
4.3.隐式对象. 最常用的隐式对象有:(其中的user是一个对象,username是user的属性)
4.3.1.与输入有关的隐含对象
${param} 表示返回请求参数中单个字符串的值
例:${param.username}
${paramValues} 表示返回请求参数的一组值
例:${paramValues.username[0]}
4.3.2.与范围有关的隐含对象 (这四个隐含对象只能用来取得范围属性值,即JSP中的 getAttribute(String name),却不能取得其他相关信息)
4.3.2.1.pageScope 表示页面范围的变量(放入page中不会)
例:
${pageScope.username}
${pageScope.user.username}
${pageScope.user[username]}
4.3.2.2.requestScope 表示请求对象的变量(声明和Java代码一样)
例:
${requestScope.username}
4.3.2.3.sessionScope 表示会话范围内的变量
例:
${sessionScope.username}
4.3.2.4.applicationScope 表示应用范围的变量.
例:
在servlet中声明application对象
HttpSession s=request.getSession();
ServletContext application=s.getServletContext();
jsp中:
${applicationScope.user.username}
或者
${applicationScope.user["username"]}
4.3.3.其他的隐式对象
4.3.3.1.cookie
例:
在cookie中设定一个名称为userCountry的值,取值:
${cookie.userCountry}
4.3.3.2.header
例:
要取得用户浏览器的版本
单一值:${header["User-Agent"]}
多值取一个:${headerValues["属性名"][哪一个值]}
4.3.3.3.initParam:自行设定 web 站台的环境参数(Context),当我们想取得这些数时,可以 使用 initParam 隐含对象去取得它
例:
取得在web.xml 中设定的参数值如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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/web-app_2_4.xsd"
version="2.4">
<context-param>
<param-name>userid</param-name>
<param-value>mike</param-value>
</context-param>
</web-app>
要取得userid属性的值mike;
之前的做法:
String userid = (String)application.getInitParameter("userid");
EL表达式:
${initParam.userid}
4.3.3.4.pageContext
${pageContext.request.queryString} 取得请求的参数字符串
${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是否为新的,所谓新的session,表示刚由server产生而client尚未使用
${pageContext.session.id} 取得session的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
注解:要在jsp中显示${}改成\${},因为${}在JSP 2.0 中是特殊字符,JSP 容器会自动将它当做 EL 来执行
4.4.自动类型转换
4.4.1.表达式中的值是非boolean的值,在类型转换原则可以的基础上可以互相转化,但是不可以转成 boolean 类型
4.4.2.表达式中是boolean类型的值,只能返回false 或者true,如果为null 或 "" 返回false;
5.EL 的保留字: (命名时避免用保留字)
And eq gt true
Or ne le false
No lt ge null
instanceof empty div mod
6.EL运算符
6.1.EL 算术运算符
算术运算符 说明 范例 结果
+ 加 ${ 17 + 5 } 22
- 减 ${ 17 - 5 } 12
* 乘 ${ 17 * 5 } 85
/ 或 div 除 ${ 17 / 5 } 或 ${ 17 div 5 } 3
% 或 mod 余数 ${ 17 % 5 } 或 ${ 17 mod 5 } 2
6.2.EL 关系运算符
关系运算符 说 明 范 例 结果
= = 或 eq 等于 ${ 5 = = 5 }或 ${ 5 eq 5 } true
!= 或 ne 不等于 ${ 5 != 5 } 或 ${ 5 ne 5 } false
< 或 lt 小于 ${ 3 < 5 } 或 ${ 3 lt 5 } true
> 或 gt 大于 ${ 3 > 5 } 或 ${ 3 gt 5 } false
<= 或 le 小于等于 ${ 3 <= 5 } 或 ${ 3 le 5 } true
>= 或 ge 大于等于 ${ 3 >= 5 } 或 ${ 3 ge 5 } false
6.3.EL逻辑运算符
逻辑运算符 说 明 范 例 结 果
&& 或 and 交集 ${ A && B } 或 ${ A and B } true / false
|| 或 or 并集 ${ A || B } 或 ${ A or B } true / false
! 或 not 非 ${ !A } 或 ${ not A } true / false
6.4.EL 其他运算符
(1) Empty 运算符 :判断值是否为 null 或空的,返回true 或者false
例:${ empty param.name }
(2) 条件运算符
例:
${ A ? B : C}
意思是说,当 A 为 true 时,执行 B;而 A 为 false 时,则执行 C。
(3) ( ) 括号运算符 :括号运算符主要用来改变执行优先权
7.自定义EL函数
Tomcat 的 EL 函数范例,主要分为四个部分:
web.xml 设定taglib的TLD文件位置
functions.jsp 使用EL函数的范例程序
jsp2-example-taglib.tld EL函数、标签库的设定文件
jsp2.examples.el.Functions.java EL函数主要程序逻辑处理部分
自定义EL函数:
7.1.函数的书写(函数必须是公开的静态方法,函数写在类文件里)
7.2.tld书写:
<function>
<description>函数描述</description>
<name>函数名称</name>
<function-class>上面的函数在那个类里面</function-class>
<function-signature> 传入值和返回值类型 </function-signature>
</function>
7.3.web中设置
<jsp-config>
<taglib> 用来设定标签的 TLD 文件位置
<taglib-uri> 用来指定 TLD 的uri 位置(类路径)</taglib-uri>
<taglib-location> 用来指定 TLD 文件的位置</taglib-location>
</taglib>
</jsp-config>
7.4.在程序中,一开始定义taglib,设置前置名(prefix),任意起名。
调用EL函数必须在开头加入:
<% @ taglib prefix="my"
uri="用来指定 TLD 的uri 位置(类路径)" %>