每篇一句:宇宙就是一座黑暗森林,每个文明都是带枪的猎人,像幽灵般潜行于林间,轻轻拨开挡路的树枝,竭力不让脚步发出一点儿声音,连呼吸都小心翼翼······ ——《三体 II :黑暗森林》
EL 表达式总是放在大括号里,而且前面有一个美元符前缀
${person.name}
表达式中第一个命名变量可以是一个隐式对象,也可以是一个属性。
点号 (.) 操作符允许使用一个 Map 键或一个 bean 性质名来访问值
例如:
${ person.name }
点号左边是一个 Map 或一个 bean,右边是一个 Map 键或一个 bean 性质
PageContext 隐式对象是一个 bean,它有获取方法,所有其他隐式对象都是 Map
如果对象是一个 bean,但是指定的性质不存在,会抛出一个异常
实例:
${ person["name"] }
左边可能是一个 Map 或一个 bean,还可以是一个 List 或数组。而右边就可以是一个 Map 键,或是一个 bean 性质,还可以是 List 或数组中的索引
1.数组或 List 中的 String 索引会强制转换为一个 int
${ favotiteFood[0] }
${ favotiteFood["0"] }
String 索引会强制转换为 int,如果索引无法转换,就会得到一个错误
2.如果不是 String 直接量,容器会计算中括号中的内容,搜索与该名字绑定的属性,并替换为这个属性的值
如果在 servlet 这样设置
request.setAttribute("Genre", "Ambient")
则在 JSP 中会计算为
${ musicMap[Genre] } --> ${ musicMap["Ambient"]
3.而如果确定放在引号里,且不是一个数组或 List 中的索引,容器会把看作是性质或键的直接量名
${ musicMap["Ambient"] } --> ${ musicMap["Ambient"]
4.在中括号里可以使用嵌套表达式
${ musicMap[MusicType[0]] } ---> ${ musicMap["Ambient"] }
11 个隐式对象如下:
在所有隐式对象中,只有 pageContext 不是映射,这是 pageContext 对象的实际引用
EL 的请求参数
如果对应特定的参数名只有一个参数,就可以用 param 隐式对象。如果有多个参数名,就要使用 paramValues
${ param.name }
${ paramValues.food[0]
host 头部
${ header["host"]
${ header.host }
header 隐式对象保存了所有首部的一个 Map。使用任意一个访问操作符,传入首部名,可打印首部的值
得到 HTTP 请求方法
${ pageContext.request.method }
pageContext 有一个 request 性质,而 request 有一个 method 性质
requestScope
隐式的 requestScope 只是请求作用域属性的一个 Map,而不是 request 对象本身
如果有命名冲突,使用作用域隐式对象域则可以避免
${ requestScope["foo.Person"].name }
打印 “userName” Cookie 的值
${ cookie.userName.value }
使用 cookie 隐式对象只需提供名,就会从 Cookie/值对的 Map 返回相应的值
打印一个上下文初始化参数的值
${ initParam.mainEmail }
EL 隐式对象 “initParam” 对应的是上下文参数
其中,有函数的类必须是公共的,而且是一个静态方法
标记库描述文件中, TLD 提供了定义函数的 Java 类与调用函数的 JSP 之间的一个映射
在 JSP 中 taglib 指令中 prefix 指定了一个前缀,uri 告诉容器 TLD 的名字
算术操作符
法则 | 符号 |
---|---|
加法 | + |
减法 | - |
乘法 | * |
除法 | / 和 div |
取模 | % 和 mod |
注意:在 EL 中是可以除 0 的,将得到 INFINITY,而不是错误。但是不能对 0 使用取模操作符,否则会得到一个异常
逻辑操作符
法则 | 符号 |
---|---|
与 | && 和 and |
或 | || 和 or |
非 | ! 和 not |
关系操作符
法则 | 符号 |
---|---|
等于 | == 和 eq |
不等于 | != 和 ne |
小于 | < 和 It |
大于 | > 和 gt |
小于等于 | <= 和 le |
大于等于 | >= 和 ge |
EL 还能处理 unknown 或 null 值,在算术表达式中,EL 把 null 值看作是 “0”。在逻辑表达式中,EL 把 null 看作是 “false”
如果有任何问题或建议,欢迎交流学习。