JSP EL 表达式总结

在 JSP 标签中指定一个属性值 value 时,可以使用字符串:

1
<jsp:setProperty name="box" property="perimeter" value="100"/>

也可以使用 EL 表达式:

1
<jsp:setProperty name="box" property="perimeter" value="${expr}"/>

那么,EL 表达式 ${expr} 中可以放些什么呢?

操作符

EL 表达式支持大部分 Java 所提供的算术和逻辑操作符:

基本操作符

操作符 描述
. 访问一个 Bean 的属性或者一个映射条目
[] 访问一个数组或者链表的元素
() 组织一个子表达式以改变优先级

算术操作符

操作符 操作符 描述
+
- 减或负
*
/ div
% mod 取模

逻辑操作符

操作符 操作符 描述
== eq 测试是否相等
!= ne 测试是否不等
< lt 测试是否小于
> gt 测试是否大于
<= le 测试是否小于等于
>= ge 测试是否大于等于
&& and 测试逻辑与
|| or 测试逻辑或
! not 测试取反
empty 测试是否空值

隐式对象

JSP 隐式对象(也称为预定义变量)是 JSP 容器为每个页面提供的 Java 对象,开发者可以直接使用它们而不用显式声明。

作用域

对象 等价物 描述
pageScope this page 作用域
requestScope javax.servlet.http.HttpServletRequest request 作用域
sessionScope javax.servlet.http.HttpSession session 作用域
applicationScope javax.servlet.ServletContext application 作用域

HTTP 请求参数

对象 等价物 描述
param request.getParameter(...) 获取指定 HTTP 请求参数,字符串
paramValues request.getParameterValues() 获取所有 HTTP 请求参数,字符串数组

例如,要判断 HTTP 请求参数 from 是否为空,可以结合使用 JSTL <c:if> 和 EL 操作符 notempty、EL 隐式对象 param 进行判断:

1
<c:if test="${not empty param.from}">

HTTP 请求头

对象 等价物 描述
header request.getHeader(...) 获取指定 HTTP 请求头,字符串
headerValues request.getHeaders() 获取所有 HTTP 请求头,字符串数组

例如,获取请求来源:${header.Referer}

对象 等价物 描述
cookie request.getCookies() javax.servlet.http.Cookie 数组

例如,获取指定 Cookie 的值:${cookie.key.value}。这段 EL 表达式会被 JSP 容器解析成:

1
2
3
4
5
6
7
8
9
10
11
12
Cookie[] cookies = request.getCookies();
Cookie current = null;

for(Cookie cookie : cookies) {
if(cookie.getName().equals("key")) {
current = cookie;
}
}

if(current != null) {
out.print(current.getValue());
}

上下文

对象 等价物 描述
initParam 上下文初始化参数,即 web.xml<context-param>
pageContext javax.servlet.jsp.PageContext 提供对 JSP 页面所有对象以及命名空间的访问

函数

EL 表达式支持使用函数,其使用语法如下:

1
${ns:fn(param1, param2, ...)}

ns 指的是命名空间(namespace),fn 指的是函数的名称,param1 指的是第一个参数,param2 指的是第二个参数,以此类推。

例如,要获取一个字符串的长度,可以使用 JSTL 的 length 函数:

1
${fn:length("Get my length")}

更多 JSTL 函数,参考这里