1.理解表达式语言
1.EL语言概述
- EL并不是一种编程语言,它仅仅是一种数据访问语言。
- 作为一种数据访问语言,EL具有自己的运算符,语法和保留字。
2.调用
${expression}
例如:客户名:${customer.custName},Email地址:${customer.email},<jsp:include page = "${expression1}" />,<c:out value = "${expression2}" />
3.主要功能
- 提供了一组简单的运算符
- 对作用域变量的方便访问
- 对JavaBeans对象访问的简单表示
- 对集合元素的简单访问
- 对请求参数,Cookie和其它请求数据的简单访问
- 提供了在EL中使用Java函数的功能
2.使用EL运算符
1.算数运算符

算数运算符
注意,如果你想要输出的是一个算式例如
${2+5},那么需要在$前加上转义字符\,否则会输出表达式的值7。
2.关系与逻辑运算符

关系运算符

逻辑运算符
3.条件运算符

条件运算符
例如:
${(5*5)==25?1:0}的结果为1,${("14" eq 14.0) && (14 le 16)}?"Yes":"No"的结果为Yes
4.empty运算符

empty运算符
5.属性与集合元素访问运算符

属性与集合元素访问运算符
1.点号(.)运算符
点号运算符用来访问Map对象一个键的值或者bean对象的属性值,例如:
${customer.custName}2.方括号([])运算符
方括号运算符除了可以访问Map对象一个键的值或者bean对象的属性值之外,还可以访问List对象和数组对象的元素,例如:
${param ["username"]}
3.使用EL访问数据
1.访问作用域变量
在JSP页面中,可以使用JSP表达式访问作用域变量。
- 在Servlet中使用setAttribute()将一个变量存储到某个作用域对象上,如
HttpServletRequest,HttpSession,ServletContext等。 - 使用EL就可以更方便地访问这些作用域变量。
String name = "Curry";
request.setAttribute("name",name);
${name}
2.访问JavaBeans属性
使用点号运算符或者方括号运算符,例如:${customer.custName},使用表达式语言,如果没有找到指定的属性值不会抛出异常,而是返回空字符串。另外,表达式语言还允许嵌套属性,例如${employee.address.zipCode}
3.访问元素集合
在EL中可以访问各种集合对象的元素,可以是数组,List对象,Map对象,需要用到[],例如:假设有一个上述类型的对象attributeName${attributeName[entryName]},当对象是数组或者List列表时也可以用下标来访问,[0]或者["0"]。当对象时Map对象时,可以用变量["键"]来获取对应键的值。
4.访问EL的隐含变量
JSP有9个隐含对象,而EL有11个隐含对象。如下表所示:

EL的隐含变量
1.pageContext变量
pageContext是PageContext类型的变量,PageContext有request,response,session,out和servletContext属性,因此通过pageContext变量可以访问这些属性(request,response,session,out和servletContext)的属性。例如:
${pageContext.request.method}获得请求的方法,${pageContext.request.remoteAddr}获得请求的IP地址,${pageContext.request.contextPath}获得请求的上下文路径。2.param和paramValues变量
param和paramValues变量是用来从ServletRequest中检索请求参数值。param变量相当于是调用给定参数名的
getParameter(String name)的结果,格式为${param.name}。类似地,paramValues是使用getParameterValues(String name)返回给定名称的参数值的数组,要访问参数值数组的第一个元素,可以用${paramValues.name[0]}。param和paramValues变量适用于在表单输入参数信息后提交再显示出来。3.header和headerValues变量
header和headerValues变量是从HTTP请求头中检索值,它们的运行机制和param和paramValues变量类似。例如:
${header['host']}这里得到HTTP连接头部的host,${header['accept']}这里获得HTTP头部的accept值,${header['user-agent']}这里获得HTTP头部的user-agent值。当一个请求头名称对应多个值时,使用headerValues。4.cookie变量
使用EL的cookie隐含变量得到客户向服务器发回的Cookie数组,即调用request对象的getCookies()的返回结果。

cookie变量
如上图,
cookie.un.name可以获取到键名,cookie.un.value可以获取到该键的值。5.initParam变量
initParam变量存储了Servlet上下文的参数名和参数值。例如,假设在web.xml中定义了如下初始化参数:
<context-param>
<param-name>email</param-name>
<param-value>hacker@163.com</param-value>
</context-param>
如果需要访问参数名,可以使用<%=application.getInitParameter("email")%>,用EL表达式的话只需要${initParam.email}
6.pageScope,requestScope,sessionScope和applicationScope变量
这几个变量用来访问对应作用域上的属性。例如:<%session.setAttribute ("totalprice",1000)%>可以使用${sessionScope.totalprice}来访问获取。