一、EL语法
1.1、语法结构
${expression}
1.2、[]与.运算符 EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如: ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如: ${user[data]}中data 是一个变量
1.3、变量 EL存取变量数据的方法很简单
例如:${username}。它的意思是取出某一范围中名称为username的变量。 因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
1.4、访问顺序
二、EL运算符
1.算术运算符有五个:+、-、*或$、/或div、%或mod
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.逻辑运算符有三个:&&或and、||或or、!或not
4.其它运算符有三个:Empty运算符、条件运算符、()运算符
例:${empty param.name}、${A?B:C}、${A*(B+C)}
为了避免JSP混淆运算符和页面关键字,很多运算符都有替代写法:
关系运算符 | 说明 | 范例 | 结果 |
== 或 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 | 大于等于 | ¥{3>=5}或${3ge5} | false |
注意:在使用EL 关系运算符时,不能够写成: ${param.password1} == ${param.password2} 或者 ${ ${param.password1 } == ${ param.password2 } }
而应写成 ${ param.password1 == param.password2 }逻辑运算符
逻辑运算符 | 范例 | 结果 |
&&或and | 交集${A && B}或${A and B} | true/false |
||或or | 并集${A || B}或${A or B} | true/false |
!或not | 非${! A }或${not A} | true/false |
三、EL访问pageContext
使用EL访问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 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
四、EL访问对象
EL表达式可以访问一系列对象,一共有11个。我们重点学习了最重要的1-6。
(1)pageContext:指JSP的pageContext对象
(2)pageScope:一个Map对象,包括page范围的属性和值
(3)requestScope:一个Map对象,包括request范围的属性和值
(4)sessionScope:一个Map对象,包括session范围的属性和值
(5)ApplicationScope:一个Map对象,包括application范围的属性和值
(6)param:一个Map对象,包括Web请求参数(request parameter)的字符串值,对应了ServletRequest.getParameter(String)
(7)paramValues:一个Map对象,包括Web请求参数(request parameter)的多个字符串值,对应了ServletRequest.getParameterValues(String)
(8)header:一个Map对象,包括请求的头信息值,对应了ServletRequest.getHeader(String)
(9)headerValues:一个Map对象,包括请求的头信息多个值,对应了ServletRequest.getHeaders(String)
(10)cookie:一个Map对象,包括对应名称的Cookie,对应了HttpServletRequest.getCookie(String)
(11)initParam:一个Map对象,包括一个Web程序的初始化参数值,对应了ServletRequest.getInitParameter(String)