13.《JavaEE 学习笔记》EL表达式

参考链接: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。表达式 {cookie. name .value} 返回带有特定名称的第一个 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}应当改为{user["My-Name"]}

如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:

${sessionScope.user[data]}中data 是一个变量

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容