一、概念
EL是JSP表达式语言,全称是ExpressionLanguage,使用EL的目的是简化在JSP中访问变量的方式,简单静态HTML与Java代码的耦合。
二、基本语法
${ EL Expression}
${ "Helloworld"} //输出字符串常量
${ user.name} //输出user对象的name属性
${user["name"] } //同上
[ ]与.的区别
EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:
${ user.name} 等于${user["name"] }
. 和 [ ] 也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price} //shoppingCart中第一项物品的价格
不过,以下两种情况,两者会有差异:
(1)当要存取的属性名称中包含一些特殊字符,要使用[ ],如. 或 – 等并非字母或数字的符号
例如:${user.my-Name }
上述是不正确的方式,应当改为:${user["My-Name"] }
(2)想要动态获取变量值,要使用[ ]
${sessionScope.user[data]}
此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};
假若data 的值为"name"时,它就等于${sessionScope.user.name}
因此,如果要动态取值时,就可以用上述的方法来做,但. 无法做到动态取值
三、11个隐含/内置对象
术语 | 定义 |
---|---|
pageScope(域对象) | 将页面范围的变量名称映射到其值,对象允许访问请求对象的属性,page域范围 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象; ${pageScope.objectName.attributeName} 访问对象的属性 |
requestScope(域对象) | 将请求范围的变量名称映射到其值,该对象允许访问请求对象的属性,request域范围 ${requestScope.objectName} 访问一个 JSP 请求范围的对象;${requestScope.objectName.attributeName} 访问对象的属性 |
sessionScope(域对象) | 将会话范围的变量名称映射到其值,该对象允许访问会话对象的属性,session域范围 ${sessionScope.objectName} 访问session范围的对象; ${sessionScope.objectName.attributeName} 访问对象的属性 |
applicationScope(域对象) | 将应用程序范围的变量名称映射到其值,允许访问应用程序范围的对象,application域范围 ${applicationScope.objectName} 访问应用程序范围的对象; ${applicationScope.objectName.attributeName} 访问对象的属性 |
param | 将请求参数名称映射到单个字符串参数值,通过调用 ServletRequest.getParameter (String name) 获得其中getParameter (String) 方法返回带有特定名称的参数。 表达式 $(param.name) 相当于 request.getParameter (name) |
paramValues | 将请求参数名称映射到一个数值数组,通过调用 ServletRequest.getParameter (String name) 获得。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。 ${paramvalues.name) 相当于 request.getParamterValues(name) |
header | 将请求头名称映射到单个字符串头值,通过调用 ServletRequest.getHeader(String name) 获得。 表达式 ${header.name} 相当于 request.getHeader(name) |
headerValues | 将请求头名称映射到一个数值数组,通过调用 ServletRequest.getHeaders(String) 获得。它与头隐式对象非常类似。 表达式 ${headerValues.name} 相当于 request.getHeaderValues(name) |
cookie | 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。 表达式 ${cookie.name.value} 返回带有特定名称的第一个 cookie 值; 如果请求包含多个同名的 cookie,则应该使用 ${headerValues.name} 表达式 |
initParam | 将上下文初始化参数名称映射到单个值,通过调用 ServletContext.getInitparameter(String name) 获得。 |
四、运算符
1.关系运算符
关系运算符 | 说明 | 范例 | 结果 |
== 或 eq | 等于 | ${5==5}或${5eq5} | true |
!= 或 ne | 不等于 | ${5!=5}或${5ne5} | false |
< 或 lt | 小于 | ${3<5}或${3lt5} | true |
> 或 gt | 大于 | ${3>5}或{3gt5} | false |
<= 或 le | 小于等于 | ${3<=5}或${3le5} | true |
>= 或 ge | 大于等于 | 5}或${3ge5} | false |
注意:在使用EL 关系运算符时,不能够写成:
${param.password1} = =${param.password2} 或 ${ ${param.password1 } = = ${param.password2 } }
而应写成 ${ param.password1 = =param.password2 }
2. 逻辑运算符
逻辑运算符 | 范例 | 结果 |
&&或and | 交集${A && B}或${A and B} | true/false |
||或or | 并集${A || B}或${A or B} | true/false |
!或not | 非${! A }或${not A} | true/false |
3.Empty 运算符
${empty 变量名称 } 判断是否为null," ",空数组(size=0)返回布尔值
4.三目条件运算符
${ A ? B : C}