EL

  • EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。

  • EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。

  • EL表达式出现的目的是为了使JSP写起来更加简单,让jsp的代码更佳简化。

  • EL表达式仅仅用来读取数据,而不能对数据进行修改。

  • 使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。

EL表达式,它能够极大的简化JSP页面上数据的显示。他就是被用来优化数据读取操作的。

EL表达式的最主要功能就是从域对象中获取数据,并且输出

基本语法

EL表达式总是放在{}中,而且前边有一个$作为前缀

 ${标识符}
  • 第一点:当EL表达式输出的key不存在的时候,输出的是空串””

  • 第二点:EL表达式在域对象中搜索属性的顺序是pageContext,request,session,application

  • 获取域中的对象可以直接使用对象名,这时按照从小到大的顺序依次向上查找。如获取域中名字为user的对象

    • ${user}

  • 获取对象的属性值可以直接通过“对象.属性名”

    • ${user.name}

  • 注意:这里的属性名是get和set方法对应的属性值,并不是对象中的变量名。

    • 比如:如果获取name属性值,那么该对象中必定要存在一个getName()方法。

  • 获取对象的属性也可以通过“对象[“属性名”]”

    • ${user[“name”]}

  • 获取Map中属性时可以直接通过属性的key

    • ${map.key}

    • ${map[key]}

  • 在指定域中获取属性

    • 在EL表达式中如果我们直接使用属性名如:${user},它将会在四个域中由小到大依次查找。顺序:pageScope、requestScope、sessionScope、applicationScope。

    • 也可以指定从哪个域中获取:

      • ${ pageScope .user}:当前页面

      • ${requestScope.user}:当前请求

      • ${sessionScope.user}:当前会话

      • ${applicationScope.user}:当前应用

运算符

语法:${ 运算表达式 }

算数运算符 说 明 范 例 结果
+ 加法 ${ 12 + 18 } 30
- 减法 ${ 18 - 8 } 10
* 乘法 ${ 12 * 12 } 144
/ 或div 除法 ${ 144 / 12 } 或 ${ 144 div 12 } 12
% 或mod 取模 ${ 144 % 10 } 或 ${ 144 mod 10 } 4
关系运算符 说 明 范 例 结果
== 或 eq 等于 ${ 5 == 5 } 或 ${ 5 eq 5 } true
!= 或 ne 不等于 ${ 5 !=5 } 或 ${ 5 ne 5 } false
< 或 lt 小于 ${ 3 < 5 } 或 ${ 3 lt 5 } true
> 或 gt 大于 ${ 2 > 10 } 或 ${ 2 gt 10 } false
<= 或 le 小于等于 ${ 5 <= 12 } 或 ${ 5 le 12 } true
>= 或 ge 大于等于 ${ 3 >= 5 } 或 ${ 3 ge 5 } false
逻辑运算符 说 明 范 例 结果
&& 或 and 与运算 ${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 } false
|| 或 or 或运算 ${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 } true
! 或 not 取反运算 ${ !true } 或 ${not true } false

empty运算符

empty运算是判断一个对象或者集合是否为空。返回boolean值。

  • 对象为null时,返回true

  • 如果是空的字符串,返回true

  • 如果是空的Object数组(Object数组.length == 0),返回true

  • 空的集合,返回true

  • 空的map,返回true

三元运算符

${ 表达式1 ? 表达式2 : 表达式3 }

“.”和[]运算符

  • “.” 运算符,可以取JavaBean对象的属性值,也可以取map中某个key的值。

  • [] 中括号,可以获取顺序集合中指定索引的元素,也可以获取特殊key的值。

  • 当我们在map对象中存放一些特殊的key的时候,比如说,key字符串中含有 “.” 、“+” 、“-” 、“*” 、“/” 、 “%” 等 这些运算符的时候,会让el解析器产生歧义的时候。我们可以使用[‘key’]中括号加引号包含key的形式取值。

  • []中括号,可以获取有序集合(数组和List集合)中的给定索引的元素

11个隐含对象

这些对象可以在EL表达式中直接使用

隐含对象 类型 说明
pageContext javax.servlet.jsp.PageContext 就是JSP页面中的pageContext对象
pageScope java.util.Map<String,Object> Page范围属性名和属性值
requestScope java.util.Map<String,Object> Request范围属性名和属性值
sessionScope java.util.Map<String,Object> Session范围属性名和属性值
applicationScope java.util.Map<String,Object> Web应用范围属性名和属性值
param java.util.Map<String,String> 对应一个请求参数
paramValues java.util.Map<String,String[]> 对应一组请求参数
header java.util.Map<String,String> 请求头
headerValues java.util.Map<String,String[]> 请求头返回字符数组
cookie java.util.Map<String, Cookie> 获取某个cookie对象
initParam java.util.Map<String, String> 获取web.xml中<context-param>初始化参数
  • 请求域

    • 请求域主要用于获取域对象中的属性,四个对象分别对应四个请求域。

      • pageScope

      • requestScope

      • sessionScope

      • applicationScope

  • 请求参数

    • 参数对象主要用于获取get或post请求中的参数。

      • param:获取指定的请求参数, 如:${param.username},与jsp中request.getParameter()作用一致。

      • paramValues:获取请求参数数组,如:${paramValues.hobby}会返回一个string类型的数组

获取域数据的顺序

在执行时,会用标识符为关键字分别从page、request、session、application四个域中查找对应key的对象。找到则返回相应数据。找不到则返回空串。(注意,不是null,而是空字符串)

获取javaBean普通属性、数组属性、List集合属性,map属性中的数据

${  user.username  }          // 获取user对象中。username属性值 

${  list[下标]  }               // 访问有序集合(或数组)中给定索引的元素

${  map.key  }                 // 访问map集合中指定key的属性值

${  map[“key”] }               // 访问特殊字符串的key的属性值

一定要记住一点,EL表达式获取数据的时候,是通过对应的get方法获取的 BeanUtils 是通过set方法设置值

pageContext访问Jsp中内置对象

  • 通过pageContext对象我们可以直接获取jsp中的一些内置对象,比如:request对象,session对象,Servletconfig对象,ServletContext对象,然后获取一些我们需要的信息。

  • 常用的功能获取

    • 协议

    • 服务器ip

    • 服务器端口

    • 获取工程路径

    • 获取请求方法

    • 获取客户端ip地址

    • 获取会话的id编号

  • 工程名(上下文路径):${ pageContext.request.contextPath }

  • 但是在实际项目中为了缩短代码量,会把request对象放在pageContext域对象中。然后再使用。比如

<%
// 先把request对象放到pageContext域对象中
pageContext.setAttribute(“req”,request);
%>
//然后EL表达式代码改为
工程名(上下文路径):${ req.contextPath }

其他隐含对象

<body>
参数username的值:${ param.username }<br/>
参数hobby的值:${ paramValues.hobby[0] }<br/>
请求头Accept-Language的值:${ header["Accept-Language"] }<br/>
请求头Accept的值:${ headerValues["Accept"][0] }<br/>
cookie的key = ${ cookie.JSESSIONID.name } : value = ${ cookie.JSESSIONID.value } <br/>
上下文参数:${ initParam.username }<br/>
</body>

Web基础了解版07-EL表达式-运算符-11个隐式对象的更多相关文章

  1. 四大域对象,和jsp的九大隐式对象,已经el表达式的11个隐式对象

    四大域对象 1.PageContext :页面范围的数据 2.ServletRequest:请求范围的数据 3.HttpSession:回话范围的数据 4.ServletContext:应用范围的数据 ...

  2. EL表达式中的11个隐式对象

    EL表达式中定义了11个隐式对象,使用这些隐式对象可以很方便地读取到Cookie.HTTP请求消息头字段.请求参数.Web应用程序中的初始化参数的信息,EL表达式中的隐式对象具体如下: 隐式对象 作用 ...

  3. 转:EL表达式的11个内置对象

    原文地址:https://blog.csdn.net/qq_17045385/article/details/54799998 EL是JSP内置的表达式语言 JSP2.0开始,不让再使用Java脚本, ...

  4. [转]【EL表达式】11个内置对象(用的少) & EL执行表达式

    1.EL的内置对象 其他不用记,红色记一下 代码: 2.EL执行表达式

  5. JSP 4个域对象-9个内置对象-11个EL隐式对象

    一. 四大域对象 1. PageContext :页面范围的数据 2. ServletRequest:请求范围的数据 3. HttpSession:会话范围的数据 4. ServletContext: ...

  6. java web学习总结(三十一) -------------------EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  7. EL表达式运算符

    语法:${运算表达式},EL表达式支持如下运算符 1.empty运算符:检查对象是否为null或“空”. 2.二元表达式:${user!=null?user.name : “”} . 3.[ ] 和 ...

  8. Web基础了解版06-Jsp

    Jsp Jsp全称Java Server Pages,也就是在我们JavaWeb中的动态页面. Jsp能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML. Jsp其本质就是一个Se ...

  9. JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式

    目录 1.JSP概述 2.注释(comment) 2.1.JSP注释 2.2.HTML注释 3.隐式对象(implicit object) 3.1.隐式对象清单 3.2.request对象 3.3.o ...

随机推荐

  1. 【C/C++】最短路径

    BFS求无权图的最短路径 用book数组的值表示路径长度即可,省略 Floyd算法(允许负边) Floyd算法可以一次性求出所有节点之间的最短距离,且代码简单,但是时间复杂度达到了n^3,因此只适用于 ...

  2. javascript当中prototype用法

    prototype见上一节,马克-to-win:prototype作用就是给某个类增加一个实例方法. 例 3.6.2 <head>    <meta http-equiv=" ...

  3. 【Node】Webpack调试启动

    "start": "webpack-dev-server --port 33333 --content-base ./dist",

  4. C++——绪论

    计算机语言的发展 1.机器语言(二进制).汇编语言.比较难以理解和识记,与人类语言之间的差距太大: 2.高级语言,可以写出类似于人类思维的语句,可以有人们习惯的表达方式: 3.面向对象的语言,描述客观 ...

  5. [USACO16OPEN]248&262144

    Description 在1*n的序列中,每次可以合并两个相邻且相等的数,变成它们两个加1,求最大的数. Solution 设\(f[i][j]\)表示\([i,k)\)这个区间能合并出\(j\)的最 ...

  6. python3 win 建立虚拟环境(virtualenv)

    1.安装virtualenv pip3 install virtualenv 2.进入即将创建虚拟环境的目录 cd xxxx 3.创建虚拟环境 py -3 -m venv testxunihua 4. ...

  7. 基于PO和单例设计模式用python+selenium进行ui自动化框架设计

    一)框架目录的结构 二)config包当中的config.ini文件主要是用来存项目的绝对路径,是为了后续跑用例和生成测试报告做准备然后目前的配置文件大都会用yaml,ini,excel,还有.py也 ...

  8. How to Create an OCM Response file to Apply a Patch in Silent Mode - opatch silent

    Windows Server 2019 打补丁时缺少Oracle Configuration Manager(OCM) 响应文件处理方式. 适用: Oracle Universal Installer ...

  9. Windows下编译Google.Protobuf在Qt(C++)中使用与Unity3d(C#)交互

    1.首先从Github-Protobuf下载代码,本文下载的版本号是3.1.0. 2.仔细查看各个README,有相关的资源下载和编译说明. 3.在一个方便的地方创建一个Install类型的文件夹,放 ...

  10. thows,thow和try catch的区别

    1.throw是当前方法不处理这个异常,由它的上一级进行处理.并且抛出异常后将停止执行代码. package myProject; public class ExceptionTest { //测试t ...