07.EL

07.EL

一、简介

  • 全称:Expression Language,表达式语言,用来代替JSP表达式
  • 格式:${表达式}
  • 作用:主要用来获取域对象中的属性值
  • EL表达式的查询规则:
    • 默认会进行全域(四个域都查)查找,先从page域中开始查找,找到后直接返回,不在去其他域中查找;如果在page域中找不到,则去request域中查找,找到后直接返回,不再去session域中查找,依次类推…
    • 如果最后在application域中也找不到则什么也不输出
  • EL给我们提供了四个Scope对象,用来精确获取指定域中的属性值
    • pageScope
      • 获取page域中的属性值
    • requestScope
      • 获取request域中的属性值
    • sessionScope
      • 获取session域中的属性值
    • applicationScope
      • 获取application域中的属性值
  • 当域对象中存放数据时的key比较特殊时,比如使用了减号,则需要通过[]的方式获取域中的属性值
  <%
            Date date = new Date();
            //将date放到域中
          pageContext.setAttribute("date",date+"-");
          request.setAttribute("date",date+"--");
          session.setAttribute("date",date+"---");
          application.setAttribute("date",date+"----");
          //向域中放数据时key比较特殊的情况
          pageContext.setAttribute("hello-kitty","Tomcat");
      %>
      通过JSP表达式输出当前时间:<%=date%><br>
      通过EL表达式获取当前的时间:${date}<br>
      通过EL表达式精确获取request域中的时间:${requestScope.date}<br>
      通过EL表达式获取page域中key比较特殊的属性值:${pageScope['hello-kitty']}<br>

二、通过EL表达式获取JavaBean的属性值

  • Employee类
package com.atguigu.el.beans;

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private Department dept;

    public Employee() {
    }

    public Employee(Integer id, String lastName, String email, Department dept) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.dept = dept;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        System.out.println("getLastName方法被调用");
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Department getDept() {
        return dept;
    }

    public void setDept(Department dept) {
        this.dept = dept;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", dept=" + dept +
                '}';
    }

    public int getAge(){
        return 23;
    }

    public boolean isMarried(){
        return true;
    }

    public int sleepingTime(){
        return 6;
    }
}

  • Department类
package com.atguigu.el.beans;

public class Department {
    private Integer id;
    private String name;

    public Department() {
    }

    public Department(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Department{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
  • 1)通过对象.属性名的方式获取JavaBean的属性值

    • 调用的是属性对应的get方法
    • 如果对象的属性是一个其他JavaBean类型的值,可以通过继续点的方式获取属性的属性值
  • 2)通过对象.get方法或is方法单词的首字母小写获取类中方法的返回值

  • 3)直接通过对象.方法获取方法的返回值

<%
          //创建JavaBean对象
          Employee employee = new Employee(1,"张三","zhangsan@lisi.com",new Department(1001,"小卖部"));
          //将employee放到page域中
          pageContext.setAttribute("emp",employee);
      %>
      通过EL表达式获取employee对象的lastName属性值:${emp.lastName}<br>
      通过EL表达式获取employee对象的dept属性的name属性值:${emp.dept.name}<br>
      通过EL表达式获取employee对象中getAge方法的返回值:${emp.age}<br>
      通过EL表达式获取employee对象中isMarried方法的返回值:${emp.married}<br>
      通过EL表达式获取employee对象中sleepingTime方法的返回值:${emp.sleepingTime()}<br>

三、EL中的11个隐含对象

  • 一个我们比较熟悉的

    • pageContext

      • 类型:PageContext
      • 它既是JSP的隐含对象,也是EL的隐含对象
      • pageContext在EL表达式中可以直接使用,如果在EL表达式中要使用JSP中的其他八个隐含对象必须通过pageContext来获取
      • 通常我们通过EL表达式使用该对象获取项目的虚拟路径
      通过EL表达式获取项目的虚拟路径:${pageContext.request.contextPath}<br>
      
  • 四个Scope对象

    • pageScope
      • 类型:Map<String ,Object>
      • 作用:获取page域中的属性值
    • requestScope
      • 类型:Map<String ,Object>
      • 作用:获取request域中的属性值
    • sessionScope
      • 类型:Map<String ,Object>
      • 作用:获取session域中的属性值
    • applicationScope
      • 类型:Map<String ,Object>
      • 作用:获取application域中的属性值
  • 其他6个隐含对象

    • param

      • 类型:Map<String , String>
      • 作用:获取请求参数
    • paramValues

      • 类型:Map<String , String[]>
      • 作用:获取请求参数中一个key对应多个值的情况
    • header

      • 类型:Map<String , String>
      • 作用:获取请求头中的信息
    • headerValues

      • 类型:Map<String , String[]>
      • 作用:获取请求头中一个key对应多个值的情况
    • cookie

      • 类型:Map<String , Cookie>
      • 作用:根据Cookie对象的名字获取Cookie对象
    • initParam

      • 类型:Map<String , String>

      • 作用:获取当前Web应用的初始化参数

        • 前提需要先在web.xml文件中配置
         <!--设置当前Web应用的初始化参数-->
            <context-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </context-param>
        
    <%--
      Created by IntelliJ IDEA.
      User: 韩总
      Date: 2021/5/22
      Time: 10:36
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>11个隐含对象</title>
    </head>
    <body>
        通过JSP表达式获取项目的虚拟路径:<%=request.getContextPath()%><br>
        通过EL表达式获取项目的虚拟路径:${pageContext.request.contextPath}<br>
        通过EL表达式中的隐含对象获取请求参数:${param.username}<br>
        通过EL表达式中的隐含对象获取请求头中User-Agent的信息:${header['User-Agent']}<br>
        通过EL表达式中的隐含对象获取请求头的Cookie对象的value值:${cookie.JSESSIONID.value}<br>
        通过EL表达式中的隐含对象获取当前Web应用的初始化参数:${initParam.encoding}<br>
    </body>
    </html>
    
    

四、empty运算符

  • EL表达式中也支持加、减、乘、除的运算

  • EL表达式中有一个常用的运算符:empty

    • 1)判断JavaBean的属性是否为空串或null
    • 2)集合是否为空
    • 非空的表示方式
      • not empty
      • !empty
    <%--empty运算符--%>
        <%
            //创建Employee对象
            Employee employee = new Employee(null,"张三",null,null);
            //将employee放到page域中
            pageContext.setAttribute("emp",employee);
            //创建一个List
            List<Employee> list = new ArrayList();
            //将list中添加一个employee对象
            list.add(employee);
            //将list放到page域中
            pageContext.setAttribute("list",list);
        %>
        使用empty运算符判断employee对象的id属性是否为null:${empty emp.id}<br>
        使用empty运算符判断employee对象的lastName属性是否为空串:${empty emp.lastName}<br>
        使用empty运算符判断list是否为空:${empty pageScope.list}<br>
        使用empty运算符判断list是否为非空:${not empty pageScope.list}<br>
        使用empty运算符判断list是否为非空:${!empty pageScope.list}<br>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值