参考链接:https://baike.baidu.com/item/EL%E8%A1%A8%E8%BE%BE%E5%BC%8F/1190845?fr=aladdin https://blog.csdn.net/goldentec/article/details/105350669
1、内容简介
表达式语言(Expression Language,简称EL),最初设计为一种简单的语言,以满足web应用程序中表示层的需要。
在JSP中访问模型对象是通过EL表达式的语法来表达。所有EL表达式的格式都是以“{ userinfo}代表获取变量userinfo的值。当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${ pageScope. userinfo}表示访问page范围中的userinfo 变量。
2、EL内置对象
EL 提供了11个内置对象:
- 2个内置对象为了方便输出请求参数;
- 4个内置对象为了方便输出各个范围的属性;
- 2个与请求头有关的内置对象;
- 2个其他内置对象cookie和initParam;
- 1个特殊的内置对象pageContext;
2.1 与请求参数有关的内置对象
EL中有两个与请求参数有关的内置对象:
2.1.1 param
将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 ${param . name}相当于 request.getParameter (name)。
用来输出请求参数的值,格式为${param.请求参数名字}。
表达式:
<%= request.getParameter("userName") %>
EL表达式:
${ param.userName }
2.1.2 paramValues
将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name} 相当于 request.getParamterValues(name)。
用来获取一对多的参数值,返回一个数组。比如请求参数为一个多选框传来的数据,可以用paramValues.array[0]来取出第一个值。其中array为参数的名称。
表达式:
<%= request.getParameterValues("array")[0] %>
EL表达式:
${ paramValues.array[0] }
2.2 与属性有关的内置对象
与属性有关的内置对象有四个:
- pageScope 页面范围,即pageContext范围。
- requestScope 请求范围。
- sessionScope 会话范围。
- applicationScope 上下文范围。
表达式:
<%= request.getAttribute("userPo").getUserName %>
EL表达式:
${ requestScope.userPo.userName }
在全局找userPo.userName,El表达式:
${ userPo.userName }
当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。
2.3 与请求头有关的内置对象
与请求头有关的内置对象有两个:
2.3.1 header
将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)。
拿出请求头中Host的信息
${header.Host}
拿出请求头中Accept-Language的信息
${header["Accept-Language"]}
2.3.2 headerValues
将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
如果某个请求头的值有多个,则使用headerValues返回一个数组。
${headerValues.cookie[0]}
2.4 其他内置对象cookie和initParam
2.4.1 cookie
将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 {headerValues. name} 表达式。
用来获取cookie的值。
${ cookie.JSESSIONID.value }
2.4.2 initParam
将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。
用来输出上下文参数的值。
在web.xml中配置上下文参数:
<context-param>
<param-name>author</param-name>
<param-value>86_god</param-value>
</context-param>
在JSP中使用EL输出path的值:
${ initParam.author}
2.5 最特殊的内置对象pageContext
JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。
EL中的pageContext对象可以调用PageContext
类中所有符合规范的getXxx方法,如PageContext类中有如下方法:
通过pageContext获取getRequest,再调用request 的getRemoteAddr()方法:
${ pageContext.request.remoteAddr }
3、EL运算符
3.1 算术运算符
EL中支持五种算术运算符:
- +实现加法运算;
- -实现减法运算;
- * 实现乘法运算;
- /或div实现除法运算;
- %或mod实现求模运算。
3.2 等式和关系运算符
EL中有6种比较运算符:
- = = 或eq表示等于。
- != 或ne表示不等于。
- < 或lt表示小于。
- > 或gt表示大于。
- <= 或le表示小于等于。
- >= 或ge表示大于等于。
3.3 条件运算符
EL中提供了3个逻辑运算符:
- &&或and表示交集,两个值都是true才返回true。
- ||或or表示并集,两个值只要有一个是true,即返回true。
- !或not表示非
3.4 其他运算符
- empty运算符 判断值是否为null,如果是null,返回true,否则返回false。
- ? :关系运算符 ${A?B:C}如果A为true,则执行B,如果A为false,则执行C。
- ()运算符 通过()可改变优先级。
3.5 符号.与[]
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
{user["My-Name"]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量