1.EL表达式简介

EL全名为Expression Language。EL的主要作用为:

  • 获取数据:EL表达式主要用于替换jsp页面中的脚本表达式,以从各种类型的web域中检索java对象,获取数据。(某个web域中的对象,访问JavaBean的属性,访问list集合,访问map集合,访问数组)
  • 执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
  • 获取web开发常用对象:EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
  • 调用java方法:EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

1.1 获取数据

使用EL表达式获取数据的语法:"${标识符}"

EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回""(空字符串)。若没有指定哪个属性范围,它的默认值会从page范围找,假如找不到,再依序到request,session,application范围找。假如全部的范围都找不到时,就返回null值了。如下:${ }中没有sessionScope属性范围,依旧可以读到存储的数据。

<body>
<%
Customer customer=new Customer();
customer.setName("koala");
customer.setAge(12);
session.setAttribute("customer",customer);
%>
<br>
name: ${customer.name}
<br>
age: ${customer.age}
</body>

EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据。

获取request域中的对象:

<body>
<% request.setAttribute("name", "koala"); %>
name: ${name}
</body>

获取JavaBean的属性:

<body>
<%
Customer customer=new Customer();
customer.setAge(21);
request.setAttribute("customer",customer);
%>
customer's age: ${customer.age}
</body>

获取list集合中指定位置的元素:

<body>
<%
Customer customer1=new Customer();
customer1.setAge(21);
Customer customer2=new Customer();
customer2.setAge(23);
List<Customer> list=new ArrayList<Customer>();
list.add(customer1);
list.add(customer2);
request.setAttribute("list", list);
%>
customer2's age:${list[1].age}
</body>

1.2 执行运算

语法:${运算表达式},EL表达式支持如下运算符:

1.2.1 关系运算符

1.2.2 逻辑运算符

1.2.3 empty运算符

检查对象是否为null(空)

1.2.4 二元表达式

${username==null?"":user.name}

1.2.5 []和.号运算符

EL提供.和[]两种运算符来存取数据,两者所代表的意思是一样的。

如下,当域对象的属性名中有特殊字符“.”时使用[]会很方便:

<body>
<%
Customer customer=new Customer();
customer.setName("koala");
session.setAttribute("com.d.dsa",customer);
%>
<br>
name: ${sessionScope["com.d.dsa"].name}
</body>

2.EL的隐含对象

EL中一共有11个隐含对象,可以将它分成三类:

  • 与范围有关的隐含对象:pageScope, requestScope, sessionScope, applicationScope
  • 与输入有关的隐含对象,获取请求参数的:param(一个), paramValues(一组)
  • 其它请求对象:cookie, header, headerValues, initParam, pageContext

2.1 与范围有关的隐含对象

<body>
time:${applicationScope.time}
<!-- 相当于
<%=application.getAttribute("time") %>
-->
<%
application.setAttribute("time",new Date());
%>
</body>

2.2 与输入有关的隐含对象

el.jsp中:

 <body>
  <a href="http://localhost:8080/MyWebProject/jspTest/el2.jsp?score=98&name=A&name=B">To EL2 page</a>
 </body>

el2.jsp中:

<body>
    score:${param.score}
<!--相当于:
    <%= request.getAttribute("score")%>
      -->
    <br>
    names:${paramValues.name[0]} and ${paramValues.name[1]}
</body>

运行el.jsp:

点击超链接:

注:

names:${paramValues.name[0].class.name}

相当于

<%= request.getParameterValues("name")[0].getClass().getName()%>

也就是只要返回值有get...方法,就可以使用EL方法调用。

2.3 其它请求对象

  • cookie:假如我们在cookie中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。
  • header和headerValues:header存储用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如,用户浏览器的版本,用户计算机所设定的区域等其他相关数据。若同一标头名称拥有不同的值,改用headerValues。
  • initParam:获得当前web应用的初始化参数:在web.xml中进行配置,
<context-param>
<param-name>initName</param-name>
<param-value>koala</param-value>
</context-param>

在jsp文件中使用initParam:${initParam.initName}即可获得当前web应用的初始化参数koala。

  • pageContext:pageContext即为PageContext类型,但只能读取属性。

contextPath:${pageContext.request.contextPath}

sessionId:${pageContext.session.id}

sessionAttributeNames:${pageContext.session.attributeNames}

3.EL的关系运算符

比较重要的是三目运算符:${param.score > 60 ? "及格" : "不及格"}

4.empty运算符

empty可以作用于一个集合,若集合不存在或集合中没有元素,其结果都为true。

<body>
<%
List<String> names=new ArrayList<String>();
names.add("abc");
request.setAttribute("names",names);
%>
names is empty:${empty requestScope.names}
</body>

运行jsp文件,

搜索微信公众号“程序员考拉”欢迎关注!

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. IT兄弟连 JavaWeb教程 EL表达式中的运算

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

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

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

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

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

  7. 【JavaWeb】EL表达式

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

  8. JavaWeb 之 EL表达式

    EL 表达式 一.概述 1.概念 EL 表达式:Expression Language 表达式语言. 2.作用 替换和简化 jsp 页面中 java 代码的编写. 3.语法格式 ${表达式} 4.注意 ...

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

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

随机推荐

  1. C++小总结

    1.C与C++的简单区别 1.建立的文件类型不一样,C语言是.c,C++是.cpp 2.引入的头文件不一样 3.C++有命名空间 4.输入输出语句不一样 5.C语言不允许重载,C++可以重载 6.自定 ...

  2. mongoDB使用小记

    1.简介: MongoDB是由c++语言编写的,基于分布式文件存储的开源数据库系统.MongoDB将数据存储为一个文档,数据结构有键-值对,类似于JSON对象. MongoDB其中的一些概念如下: M ...

  3. 使用python uiautomation从钉钉网页版提取公司所有联系人信息

    之前写了一个提取QQ群里所有人信息的脚本 https://www.cnblogs.com/Yinkaisheng/p/5114932.html 今天写一个从钉钉网页版提取公司所有人通讯录的脚本,,本脚 ...

  4. Python——免费观看全网视频小程序

    说明,这个小程序是基于网站“全民解析”,调用该网站的接口,实现数据传输观看视频,若该网站凉凉,则此程序凉凉. 开始之前的分析: 进入全民解析网站,我们首先查看一下网页的html代码,发现该站观看视频的 ...

  5. SD341X-SD343H蜗轮传动伸缩蝶阀厂家,SD341X-SD343H蜗轮传动伸缩蝶阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 SD341X-SD343H蜗轮传动伸缩蝶阀 无极资讯网精心为您挑选了(SD341X-SD343H蜗轮传动伸缩蝶阀)信息,其中包含了(SD341 ...

  6. 03-oracle数值函数

    --round(数值,想要保留的位数如1.2.3),作用:保留小数取值时四舍五入select round(678.656) 不保留小数,round(678.456,1) 保留一位小数,round(67 ...

  7. MYSQL分表与分区

    什么是分表分区分表分区的区别实现方式上数据处理上提高性能上实现的难易度上mysql分表和分区的联系如何分区概述分区技术支持分区类型及举例注意应用场景示例订单表比预想中扩张速度快坑爹的日志表每半月一个分 ...

  8. Oracle 维护数据的完整性 一 索引

    简介:索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低i/o 次数,从而提高数据的访问性能. 当我们从一张表中检索我们需要的数据是,oralce往往会进行全表扫描,就是遍历所有的数据行,来 ...

  9. Python调用C++DLL函数出错String类型问题

    调用c++ 函数原型如下,一直失败,请个日志断点发现 参数未能正确解析. int EXPORT init_ner(string cfg_path); typedef int (*Proc_init_n ...

  10. apache ab测试介绍

    apache ab测试介绍 安装ab命令 环境为ubuntu16.04.2 LTS,安装的命令为: sudo apt-get install apache2-utils 使用说明 格式为:ab [op ...