一、简介

  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. MySQL 设计与开发规范2

    目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ...

  2. java agent 详细介绍 -javaagent参数

    java agent 详细介绍 简介 java agent是java命令的一个参数.参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求: 这个 jar 包的MAN ...

  3. (转)react 项目构建

    原文:https://segmentfault.com/a/1190000016342792 写在前面 每次构建react项目的时候都会配置一大堆东西,时间久了就会忘记怎么配置.为了方便自己记忆也为了 ...

  4. java发送application/json格式的post请求,需要登陆

    package util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWri ...

  5. 123456123456----updateV#%#1%#%---pinLv###20%%%----com.zzj.ChildEnglis698---前show后广--儿童英语-111111111

    com.zzj.ChildEnglis698---前show后广--儿童英语-111111111

  6. blade-boot操作之Idea使用Mave和Dockerfile文件推送到harbor仓库

    mvn clean package docker:build 错误提示: Failed to execute goal com.spotify:docker-maven-plugin:1.1.0:bu ...

  7. php的工厂模式

    特点 :将调用者和创建者分离,调用者直接向工厂类请求获取调用对象,减少代码耦合,提高系统的维护性和扩展性. <?php // **** 共同接口 **** // interface DB { f ...

  8. 转载:postman自动设置token(csrf及authorization token)

    原文链接: https://knktc.com/2018/06/03/postman-set-token/ 正文引用: 近期在开发一个Django的项目,由于开启了csrf防护,所以需要在请求的hea ...

  9. AIX日志相关的命令

    常用的命令有: 1.列出简短的出错信息 errpt | more 2.列出所有硬件出错信息 errpt -d H 3.列出所有软件错误信息 errpt -d S 4.列出详细的出错信息 errpt – ...

  10. POJ-图论-并查集模板

    POJ-图论-并查集模板 1.init:把每一个元素初始化为一个集合,初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变). void init() { for ...