一、简介

  1、概念

    EL 表达式的全称:Expression Language 表达式语言。

    EL 是 JSP 内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象,取得对象属性的值,或执行简单的运算或判断操作。

  2、作用

    EL表达式主要是替换和简化 jsp 页面中表达式脚本在jsp页面中进行数据的输出。

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

  3、特点

    EL 在得到某个数据时,会自动进行数据类型的转换

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

  4、EL 表达式与 JSP 表达式的区别

    ① 如果数据为  null,jsp 显示 null,EL 则什么也不显示;

    ② EL 显示的数据,必须存放在域对象或上下文对象中;

    ③ EL 可以自带数据类型转换的功能;

  5、语法格式

${表达式}

  6、注意事项

    jsp 默认是支持 el 表达式的。

    如果要忽略 el 表达式,有两种方式

     (1)设置 jsp 中 page 指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式

     (2)\${表达式}:这种方式忽略当前这个 el 表达式,会在当前页面呈现原有格式。

  7、案例

 <body>
<%
request.setAttribute("key","值");
%>
表达式脚本输出 key 的值是:
  <%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%><br/>
EL 表达式输出 key 的值是: ${key1}
</body>

    注意:

      EL 在表达式在输出 null 值的时候,输出的空串。

      而 jsp 表达式脚本在输出 null 值的时候,输出的是 null  字符串。

二、EL 表达式搜索域数据的顺序

  EL 表达式主要是在 jsp 页面中输出数据。主要是输出 域对象 中的数据。

  当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。

  Demo:

   <%
//往四个域中都保存了相同的 key 的数据。
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
${ key }

三、EL 表达式输出信息

     创建一个 JavaBean,然后输出 JavaBean 类中的普通属性,数组属性,list集合和 map 集合属性。

    JavaBean:

 public class Person {
private String name;
private String[] phones;
private List<String> cities;
private Map<String,Object> map; public Person() {
} public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) {
this.name = name;
this.phones = phones;
this.cities = cities;
this.map = map;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String[] getPhones() {
return phones;
} public void setPhones(String[] phones) {
this.phones = phones;
} public List<String> getCities() {
return cities;
} public void setCities(List<String> cities) {
this.cities = cities;
} public Map<String, Object> getMap() {
return map;
} public void setMap(Map<String, Object> map) {
this.map = map;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", phones=" + Arrays.toString(phones) +
", cities=" + cities +
", map=" + map +
'}';
}
}

  1、输出 JavaBean 的普通属性

  2、输出数组信息

  3、输出 List 集合

  4、输出 Map 集合

    Demo:

 <%
Person person = new Person(); person.setName("Hello EL");
person.setPhones(new String[]{"123","456","789"}); List<String> cities = new ArrayList<String>();
cities.add("北京");
cities.add("上海");
cities.add("深圳");
person.setCities(cities); Map<String,Object> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3"); person.setMap(map);pageContext.setAttribute("p", person);
%> 输出 Person: ${ p }<br/>
输出 Person 的 name 属性: ${p.name} <br>
输出 Person 的 phones 数组属性值: ${p.phones[2]} <br>
输出 Person 的 cities 集合中的元素值: ${p.cities} <br>
输出 Person 的 List 集合中个别元素值: ${p.cities[2]} <br>
输出 Person 的 Map 集合: ${p.map} <br>
输出 Person 的 Map 集合中某个 key 的值: ${p.map.key3} <br>
<%--输出 Person 的 age 属性: ${p.age} <br> --%>
%>

  注意:

    ① 如果在 JavaBean 中只声明一个 age 变量,如果没有写 getAge() 方法,那么是无法通过 EL 表达式来读取该属性的;

    ② 如果在 JavaBean 中只是声明了一个 getAge() 方法,没有声明 age 这个变量,那么 EL 表达式也是可以读取;

    ③ EL 是通过JavaBean 对应的 getter() 方法来读取属性的,而不是直接通过属性的名字来读取(切记

          这里的属性名是指 JavaBean 里面的 setter 和 getter 方法去掉 set或get,然后首字母变小写就是属性了。

    ⑤ 如果发生了下标越界,并不会报错,而是显示为空字符串。

四、EL表达式——运算

  1、算数运算符

+、-、*、/(div)、%(mod)

    注意:其中的除号可以用 div 来代替,取余可以用 mod 来代替。

算数运算符 说明 范例 结果
+ 加法 ${ 12 + 18 } 30
- 减法 ${ 15 - 5 } 10
* 乘法 ${ 2 * 10 } 20
/ 或 div 除法 $( 24 / 2 ) 或 ${ 24 div 2 } 12
% 或 mod 取模 ${ 14 % 4 } 或 ${ 14 mod 10} 4

  2、关系运算符

 >  <  >=  <=  ==  !=

    关系运算符:

关系运算符 说 明 范 例 结果
== 或 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

  3、逻辑运算符

&&(and)  ||(or)  !(not)

    逻辑运算符:

逻辑运算符 说 明 范 例 结果
&& 或 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

  4、empty 空运算符

    空运算符:empty

    功能:用于判断一个数据是否为空,如果为空,则输出 true;不为空输出 false。

    一下几种情况为空:

      ① 值为 null 值的时候,为空;

      ② 值为 空串 的时候,为空;

      ③ 值是 Object 类型的数据,长度为零的时候;

      ④ list 集合,元素个数为 零;

      ⑤ map 集合,元素个数为 零;      

    Demo:

 ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0,为空或为0返回 true,不然返回 false
${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0;不为空或长度不为0返回 true,不然返回 false <body>
<%
// 1、 值为 null 值的时候, 为空
request.setAttribute("emptyNull", null); // 2、 值为空串的时候, 为空
request.setAttribute("emptyStr", ""); // 3、 值是 Object 类型数组, 长度为零的时候
request.setAttribute("emptyArr", new Object[]{}); // 4、 list 集合, 元素个数为零
List<String> list = new ArrayList<>();
// list.add("abc");
request.setAttribute("emptyList", list); // 5、 map 集合, 元素个数为零
Map<String,Object> map = new HashMap<String, Object>();
// map.put("key1", "value1");
request.setAttribute("emptyMap", map);
%>
${ empty emptyNull } <br/>
${ empty emptyStr } <br/>
${ empty emptyArr } <br/>
${ empty emptyList } <br/>
${ empty emptyMap } <br/>
</body>

  5、三元运算符

    格式:

表达式 1? 表达式 2: 表达式 3

    说明:如果表达式 1 的值为真, 返回表达式 2 的值, 如果表达式 1 的值为假, 返回表达式 3 的值

    Demo:

${ 12 != 12 ? "正确":"错误" }

  

  6、"." 点运算 和 [] 中括号运算符

    说明:

. 点运算,可以输出 JavaBean 对象中某个属性的值(其实是调用的 getter() 方法)

[ ] 中括号运算,可以输出有序集合中某个元素的值,并且中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值,key需要用引号(单引号或双引号)引起来 

    Demo:

 <body>
<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("a.a.a", "aaaValue");
map.put("b+b+b", "bbbValue");
map.put("c-c-c", "cccValue");
request.setAttribute("map", map);
%>
${ map['a.a.a'] } <br>
${ map["b+b+b"] } <br>
${ map['c-c-c'] } <br>
</body>

五、EL 表达式的 11 个隐含对象

  EL 表达式中有 11 个隐含对象,是 EL 表达式自已定义的,可以直接拿来使用。

变量 类型 作用
pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象
pageScope Map<String,Object> 它可以获取 pageContext 域中的数据
requestScope Map<String,Object> 它可以获取 Request 域中的数据
sessionScope Map<String,Object> 它可以获取 Session 域中的数据
applicationScope Map<String,Object> 它可以获取 ServletContext 域中的数据
param Map<String,String> 它可以获取请求参数的值
paramValues Map<String,String[]> 它也可以获取请求参数的值, 获取多个值的时候使用。
header Map<String,String> 它可以获取请求头的信息
headerValues Map<String,String[]> 它可以获取请求头的信息, 它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam Map<String,String>  它可以获取在 web.xml 中配置的<context-param>上下文参数

六、使用隐含对象

  1、pageContext 对象的使用

    使用 pageContext 对象可以获取:

1. 协议:
2. 服务器 ip:
3. 服务器端口:
4. 获取工程路径:
5. 获取请求方法:
6. 获取客户端 ip 地址:
7. 获取会话的 id 编号:

8. 获取 jsp 其他的八个内置对象

    Demo:

 <body>
<%--
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器 ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET 或 POST)
request.getRemoteHost() 获取客户端的 ip 地址
session.getId() 获取会话的唯一标识
--%>
<%
pageContext.setAttribute("req", request);
%>
<%=request.getScheme() %> <br>
1.协议: ${ req.scheme }<br>
2.服务器 ip: ${ pageContext.request.serverName }<br>
3.服务器端口: ${ pageContext.request.serverPort }<br>
4.获取工程路径: ${ pageContext.request.contextPath }<br>
5.获取请求方法: ${ pageContext.request.method }<br>
6.获取客户端 ip 地址: ${ pageContext.request.remoteHost }<br>
7.获取会话的 id 编号: ${ pageContext.session.id }<br>
</body>

  2、EL 获取四个特定域中的属性

      EL 表达式只能从域对象中获取值,依次从最小的域中查找是否有该键对应的值,直到找到为止

      使用 域名称可以选择性地获取域对象中的数据

      注意:如果在域中没有对应的键值对,会返回空字符串""

域名称 作用域
pageScope pageContext域
requestScope request域
sessionScope session域
applicationScope application(ServletContext)域

      Demo:

 <body>
<%
pageContext.setAttribute("key1", "pageContext1");
pageContext.setAttribute("key2", "pageContext2");
request.setAttribute("key2", "request");
session.setAttribute("key2", "session");
application.setAttribute("key2", "application");
%>
${ applicationScope.key2 }
</body>

   3、获取参数的信息

    说明:

param                             Map<String,String>                           它可以获取请求参数的值
paramValues                  Map<String,String[]>                         它也可以获取请求参数的值, 获取多个值的时候使用。

    Demo:

 请求地址:
http://localhost:8080/09_EL_JSTL/other_el.jsp?username=zs&password=666&hobby=java&hobby=cpp 输出请求参数 username 的值: ${ param.username } <br>
输出请求参数 password 的值: ${ param.password } <br>
输出请求参数 username 的值: ${ paramValues.username[0] } <br>
输出请求参数 hobby 的值: ${ paramValues.hobby[0] } <br>
输出请求参数 hobby 的值: ${ paramValues.hobby[1] } <br>

  4、获取请求头的信息

    说明:

header                                          Map<String,String>                                   它可以获取请求头的信息
headerValues                               Map<String,String[]>                                 它可以获取请求头的信息, 它可以获取多个值的情况

    Demo:

 输出请求头【User-Agent】 的值: ${ header['User-Agent'] } <br>
输出请求头【Connection】 的值: ${ header.Connection } <br>
输出请求头【User-Agent】 的值: ${ headerValues['User-Agent'][0] } <br>

  5、获取 cookie 信息

    说明:

cookie                                            Map<String,Cookie>                                它可以获取当前请求的 Cookie 信息

    Demo:

 获取 Cookie 的名称: ${ cookie.JSESSIONID.name } <br>
获取 Cookie 的值: ${ cookie.JSESSIONID.value } <br>

  6、获取配置参数信息

    说明:

initParam Map<String,String> 它可以获取在 web.xml 中配置的<context-param>上下文参数

    Demo:

 web.xml 中的配置
<context-param>
  <param-name>username</param-name>
  <param-value>root</param-value>
</context-param>
<context-param>
  <param-name>url</param-name>
  <param-value>jdbc:mysql:///test</param-value>
</context-param> 示例代码:
输出&lt;Context-param&gt;username 的值: ${ initParam.username } <br>
输出&lt;Context-param&gt;url 的值: ${ initParam.url } <br>

JavaWeb 之 EL表达式的更多相关文章

  1. JavaWeb基础—EL表达式与JSTL标签库

    EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一 ...

  2. 【JavaWeb】EL表达式&过滤器&监听器

    EL表达式和JSTL EL表达式 EL表达式概述 基本概念 EL表达式,全称是Expression Language.意为表达式语言.它是Servlet规范中的一部分,是JSP2.0规范加入的内容.其 ...

  3. javaWEB与EL表达式

    EL表达式1. EL是JSP内置的表达式语言!  * jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本!  * EL替代的是<%= ... %>,也 ...

  4. Javaweb之EL表达式

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

  5. IT兄弟连 JavaWeb教程 EL表达式中的运算

    EL语言支持算符运算符.关系运算符和逻辑运算符等,以完成常见的数据处理操作.所有的运算符说明见表7.2. 表2  El表达式中的运算符

  6. IT兄弟连 JavaWeb教程 EL表达式中的内置对象

    EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问Web应用中的特定数据.表1对这11个隐含对象做了说明. 1  EL表达式中的内置对象 这11个隐 ...

  7. IT兄弟连 JavaWeb教程 EL表达式获取对象的属性以及数组的元素

    使用${对象名.属性名} EL表达式语言可以使用点号运算符"."来访问对象的属性,例如表达式${customer.name}表示customer对象的name属性. 使用${对象名 ...

  8. 【JavaWeb】EL表达式

    EL表达式 EL表达式语言,用于简化JSP的输出: EL表达式的基本语法:${表达式}: 示例:<h1>学生姓名:${student.name}</h1> 作用域对象 忽略书写 ...

  9. 【JavaWeb+Echarts+EL表达式】用图表形式展示数据

    1. Echarts环境配置 https://www.echartsjs.com/zh/download.html 选择需要的,然后等待Build完成之后,就会自动弹出下载框啦! 把下载好的js放在w ...

随机推荐

  1. PHP系列 | PDO::prepare(): send of 68 bytes failed with errno=32 Broken pipe

    设计场景 1.开启Redis的键空间过期事件(键过期发布任务),创建订单创建一个过期的key,按照订单号为key,设置过期时间. 2.通过Redis的订阅模式(持久阻塞),获取到订单号进行组装. 3. ...

  2. groupby 的妙用(注意size和count)

    Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚. 今天,我们一起来领略下groupby()的魅力吧. 首先,引入相关package: ...

  3. 平时没有怎么用Excel做 加减乘除 计算,猛地发现,其实Excel 是一个很好的简单计算器

    平时没有怎么用Excel做 加减乘除 计算,猛地发现,其实Excel 是一个很好的简单计算器

  4. django入门8之xadmin引入富文本和excel插件

    django入门8之xadmin引入富文本和excel插件 Xadmin引入富文本 插件的文档 https://xadmin.readthedocs.io/en/docs-chinese/make_p ...

  5. 如何分析redis中的慢查询

    慢查询的两个参数配置 慢查询只记录命令执行时间,并不包括命令排队和网络传输时间.因此客户端执行命令的时间会大于命令实际执行时间.因为命令执行排队机制,慢查询会导致其他命令级联阻塞,因此当客户端出现请求 ...

  6. element-ui 上传图片 后清空 图片 显示

    使用element-ui组件,用el-upload上传图片,上传图片后再次打开还是会有原来的图片,想要清空原来上传的图片,只需要在组件上绑定ref,在提交成功后的方法里调用this.$refs.upl ...

  7. Springboot配置连接两个数据库

    背景: 项目中需要从两个不同的数据库查询数据,之前实现方法是:springboot配置连接一个数据源,另一个使用jdbc代码连接. 为了改进,现在使用SpringBoot配置连接两个数据源 实现效果: ...

  8. go 单元测试框架介绍

    最近项目在补充单元测试,这里介绍以下几个go里流行的单元测试框架. gomock gostub monkey Convey 下面介绍下各个框架的主要用途 convey 主要用途是用来组织测试用例的 g ...

  9. 修复Nginx报错:upstream sent too big header while reading response header from upstream

    在 nginx.conf 的http段,加入下面的配置: proxy_buffer_size 128k; proxy_buffers 32k; proxy_busy_buffers_size 128k ...

  10. IntelliJ IDEA重新打开后把字母隐藏怎么办

    默认Font的字体melno不行,r会隐形 解决方案:更换idea字体,点击apply按钮即可正常显示 修改Font为的consoleas  Size:16   line spacing:1.25