目录
1、简介
EL(Expression Language)表达式是JSP内置的语言,用于访问应用程序数据,它简化了JSP的写法,在JSP页面可以不再使用JSP脚本、声明和表达式了。它的主要作用如下:
- 获取后台相关对象数据。
- 执行运算操作。
- 获取Web隐式对象数据。
2、语法
2.1 零碎知识
- EL语法:${表达式}
- 如果指只显示'${',则需要在$前加转义符,即:\${} 显示结果为:${}
- EL可通过.或[]获取相关集合或对象内的属性值,如果属性名含有特殊字符,则使用[]方式获取值
- 由于不同版本的tomcat对是否默认开启EL表达式的支持可能不同,所有建议在JSP头部加入isELIgnored="false"
2.2 expr-a[expr-b]形式表达式取值规则
- 计算expr-a值,如果值为null,则返回null,否则进行下一步;
- 计算expr-b值,如果值为null,则返回null,否则进行下一步;
- 如果expr-a为list集合,则如果expr-b值不是int类型,则抛出异常;如果expr-a[expr-b]抛出越界异常,则返回null;否则返回expr-a[expr-b]值。
- 如果expr-a为map集合,则如果expr-b为map中的key,返回数据,否则返回null。
- 如果expr-a是一个javabean,则强制expr-b为String类型,并获取expr-b的getter方法,如果找不到,抛出异常。
3、相关运算符
3.1、运算符
- 算术运算符:加(+);减(-);乘(*);除(/);取余(%);取模(mod);加减运算符优先级低于其余四个运算符;
- 逻辑运算符:与(&&/and);或(||/or);非(!/not);
- 关系运算符:等于(==/eq);不等于(!=/ne);大于(>/gt);大于等于(>=/ge);小于(</lt);小于等于(<=/le);结果返回boolean类型值;
- 三元条件运算符:${element ? A : B};
- 判空(empty)运算符:${empty element}/${not empty element}
3.2、示例
算数运算符:<br/>
加:1 + 2=${1 + 2}<br/>
减:2 - 1=${2 - 1}<br/>
乘:2 * 2=${2 * 2}<br/>
除:10 / 4=${10 / 4}<br/>
取余:10 % 3=${10 % 3}<br/>
取模:10 mod 6=${10 mod 6}<br/><br/>
逻辑运算符:<br/>
与:true && false=${true && false} / ${true and false}<br/>
或:true || false=${true || false} / ${true or false}<br/>
非:!true=${!true} / ${not true}<br/><br/>
关系运算符:<br/>
等于:1 == 2 = ${1 == 2} / ${1 eq 2 }<br/>
不等于:1 != 2 = ${1 != 2} / ${1 ne 2}<br/>
大于:1 > 2 = ${1 > 2} / ${1 gt 2}<br/>
大于等于:1 >= 2 = ${1 >= 2} / ${1 ge 2}<br/>
小于:1 < 2 = ${1 < 2} / ${1 lt 2}<br/>
小于等于:1 <= 2 = ${1 <= 2} / ${1 le 2}<br/><br/>
三元运算符和判空运算符:<br/>
1 == 1 ? true : false = ${1 == 1 ? true : false}<br/>
<c:set var="str" value="hello world"/>
empty:empty str = ${empty str}<br/>
not empty:not empty str = ${not empty str}<br/><br/>
运行结果:
4、隐式对象
4.1 隐式对象
隐式对象 | 类型 | 描述 |
pageContext | javax.servlet.ServletContext | JSP页面的上下文对象。可以访问其他JSP隐式对象 |
param | java.util.Map | 包含所有请求参数,可通过${param.name}获取数据,相当于request.getParameter(name) |
paramValues | java.util.Map | 和param类似,但检索的是一个字符串数组,表达式${paramvalues.name}相当于request.getParameterValues(name) |
header | java.util.Map | 包含请求标题,表达式${header.name}相当于request.getHeader(name) |
headerValues | java.util.Map | 包含请求标题,和header类似,但取得是数组,表达式${headerValues.name}相当于request.getHeaders(name) |
cookie | java.util.Map | 包含Cookie对象,表达式$(cookie.name.value}返回cookie中key为name的value |
initParam | java.util.Map | 包含环境初始化参数,表达式${initParam.name} 相当于servletContext.getInitParameter(name) |
pageScope | java.util.Map | 包含Page范围内的所有属性。${pageScope.pageName}相当于pageContext.getAttribute("pageName") |
requestScope | java.util.Map | 包含Request范围内的所有属性。${requestScope.requestName}相当于request.getAttribute("requestName") |
sessionScope | java.util.Map | 包含Session范围内的所有属性。${sessionScope.sessionName}相当于session.getAttribute("sessionName") |
applicationScope | java.util.Map | 包含Application范围内的所有属性。${applicationScope.applicationName}相当于application.getAttribute("applicationName") |
4.2 写法示例
${pageContext.request.characterEncoding}
${pageContext.session.creationTime}
${pageContext.servletContext.serverInfo}
${param.name}
${paramvalues.name}
${header.name}
${headerValues.name}
$(cookie.name.value}
${initParam.name}
${pageScope.pageName}
${requestScope.requestName}
${sessionScope.sessionName}
${applicationScope.applicationName}