JavaWeb学习总结(十一)EL表达式

JavaWeb学习总结(十一)EL表达式

一、简介

EL 表达式的全称是:Expression Language,即表达式语言

EL 表达式的作用:EL 表达式主要是代替 jsp 页面中的表达式脚本,在 jsp 页面中进行数据的输出。 因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。

EL 表达式的格式是:${表达式}

注意:

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

EL表达式与jsp表达式脚本对比:
JavaWeb学习总结(十一)EL表达式_第1张图片

JavaWeb学习总结(十一)EL表达式_第2张图片

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

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

当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的作用范围从小到大的顺序去进行搜索,找到就输出。
顺序:pageContext ——>request——> session ——> application
JavaWeb学习总结(十一)EL表达式_第3张图片

在这里插入图片描述

三、EL 表达式分别输出实体类的普通属性、数组属性、List集合属性、Map集合属性

案例
实体类Person:

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Person {
    private String name;
    private String[] phones;
    private List<String> cities;
    private Map<String,Object> map;

    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 Person() {
    }

    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 +
                '}';
    }
}

jsp:
JavaWeb学习总结(十一)EL表达式_第4张图片

JavaWeb学习总结(十一)EL表达式_第5张图片
其实,EL表达式对于实体类属性的输出就是调用了实体类中对应属性的get()方法。
不信?我们在Person类中添加一个get()方法,但是不去添加age这个属性:

public int getAge() {
	return 18;
}

在jsp中添加:

输出Person的age属性:${p.age} <br>

结果:
JavaWeb学习总结(十一)EL表达式_第6张图片
事实证明,EL表达式对于实体类属性的输出就是调用了实体类中对应属性的get()方法。
${object.xxx}就是调用了object.getXxx()object.isXxx()(后者适用于布尔类型的属性)

四、EL表达式中的运算

(一)关系运算

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

(三)算术运算

算数运算符 说 明 范 例 结 果
+ 加法 ${ 12 + 18 } 30
- 减法 ${ 18 - 8 } 10
* 乘法 ${ 12 * 12 } 144
/ 或 div 除法 ${ 144 / 12 } 或 ${ 144 div 12 } 12
% 或 mod 取模 ${ 144 % 10 } 或 ${ 144 mod 10 } 4

(四)empty运算

empty 运算可以判断一个数据是否为空,如果为空,则输出 true;不为空,则输出 false。

以下几种情况为空:

  1. 值为 null 值的时候
  2. 值为空串的时候
  3. 值是 Object 类型数组,且长度为零的时候
  4. list 集合,元素个数为零
  5. map 集合,元素个数为零

案例
JavaWeb学习总结(十一)EL表达式_第7张图片

JavaWeb学习总结(十一)EL表达式_第8张图片

(五)三元运算

和Java中的三元运算一样

${表达式 1?表达式 2:表达式 3}
如果表达式 1 的值为真,返回表达式 2 的值;如果表达式 1 的值为假,返回表达式 3 的值。

案例
JavaWeb学习总结(十一)EL表达式_第9张图片

在这里插入图片描述

(六).点运算 和 [] 中括号运算

  • .点运算,可以输出 Bean 对象中某个属性的值。
  • []中括号运算,可以输出有序集合中指定索引的元素的值。
    并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

案例:map 集合中 key 里含有特殊字符
JavaWeb学习总结(十一)EL表达式_第10张图片

JavaWeb学习总结(十一)EL表达式_第11张图片

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

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

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

(一)EL表达式获取四个特定域中的属性

对应关系
pageScope ———— pageContext 域
requestScope ———— Request 域
sessionScope ———— Session 域
applicationScope ———— ServletContext 域

案例:四个域中都有同个key,如何只获取ServletContext域的value?
JavaWeb学习总结(十一)EL表达式_第12张图片

JavaWeb学习总结(十一)EL表达式_第13张图片

(二)pageContext对象

我们知道,pageContext对象可以获取 jsp 中的九大内置对象,因此它通常被用来获取以下信息:

获取信息 jsp表达式脚本 EL表达式
获取请求协议 <%=request.getScheme()%> ${pageContext.request.scheme}
获取服务器 ip <%=request.getServerName()%> ${pageContext.request.serverName}
获取服务器端口号 <%=request.getServerPort()%> ${pageContext.request.serverPort}
获取当前工程路径 <%=request.getContextPath()%> ${pageContext.request.contextPath}
获取请求方法(GET或POST) <%=request.getMethod()%> ${pageContext.request.method}
获取客户端 ip 地址 <%=request.getRemoteHost()%> ${pageContext.request.remoteHost}
获取会话的唯一标识 <%=session.getId()%> ${pageContext.session.id}

案例
JavaWeb学习总结(十一)EL表达式_第14张图片

JavaWeb学习总结(十一)EL表达式_第15张图片

(三)EL 表达式其他隐含对象的使用

1.param和paramValues

  • param 它可以获取请求参数的值
  • paramValues 它也可以获取请求参数的值,获取多个值的时候使用。

案例
JavaWeb学习总结(十一)EL表达式_第16张图片

JavaWeb学习总结(十一)EL表达式_第17张图片

2.header和headerValues

  • header它可以获取请求头的信息
  • headerValues 它可以获取请求头的信息,它可以获取多个值的情况(请求头有多个值的情况比较少)

案例:
JavaWeb学习总结(十一)EL表达式_第18张图片

在这里插入图片描述

3.cookie

它可以获取当前请求的 Cookie 信息

案例
JavaWeb学习总结(十一)EL表达式_第19张图片

JavaWeb学习总结(十一)EL表达式_第20张图片

4.initParam

它可以获取在 web.xml 中配置的上下文参数

web.xml:


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>usernameparam-name>
        <param-value>rootparam-value>
    context-param>
    <context-param>
        <param-name>urlparam-name>
        <param-value>jdbc:mysql://localhost:8080/testparam-value>
    context-param>
web-app>

a.jsp:
JavaWeb学习总结(十一)EL表达式_第21张图片
JavaWeb学习总结(十一)EL表达式_第22张图片

你可能感兴趣的:(JavaWeb,学习,java,servlet)