El表达式

  • 传统方式获取作用域数据
    • 缺点一:导入包
    • 缺点二:需要强转
    • 缺点三:获取数据的代码过于麻烦。

什么是EL表达式 全称:Expression Language,一种写法非常简介的表达式。语法 简单易懂,便于使用。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言

EL表达式的作用 让jsp书写起来更加的方便。简化在jsp中获取作用域或者请 求数据的写法。也会搭配Jstl来进行使用。


El表达式的使用

  • 语法结构:${expression},提供.和[ ]两种运算符来存取数据。
  • 使用EL表达式获取请求数据
    • 请求头数据:
      • ${header}–>返回所有的请求头数据
      • ${header[“键名”]}—>返回指定的键名的请求头数据
      • ${hedaerValues[“键名”]}—>返回指定的键名(同键不同值)的值的数组。
    • 获取用户请求数据
      • 获取请求数据
        • request对象存储了请求数据—>${param.键名} 返回值
        • request对象存储了请求数据—>${paramvalues.键名} 返回的是数组
        • 获取的是通过setAttribute方法存储到作用域对象中的数据
        • ${键名} 返回键名所对应的值。
        • 注意:如果存储的是普通字符串则直接返回。如果存储的是对象,则返回的是对象
      • 获取对象中的数据:
        • 普通对象
          • ${键名.属性名.属性名….}
        • 集合对象
          • list集合—>${键名[角标]}
          • map集合—>${键名.map集合存储的键名}
    • 获取Cookie数据
      • ${cookie}—>返回存储了所有的cookie对象的map集合
      • ${cookie.键名}—->返回指定的cookie对象
      • ${cookie.键名.name}—>返回指定的cookie对象存储的数据的键名。
      • ${cookie.键名.value}—>返回指定的cookie对象存储的数据的值。
  • 使用EL表达式获取作用域数据
    • 获取作用域数据
      • ${键名}
    • 作用域查找顺序
      • 默认查找顺序:pageConext–>request—>session—>application
      • 注意:每次查找都是从小到大进行查找,找到了则获取,不再继续找了。
    • 指定查找
      • ${pageScope.键名}—${requestScope.键名}–${sessionScope.键名}–${applicationScope.键名}
    • 注意:获取的是pageContext、request、session、application四个对象中的数据,其他数据一概不理会。找到了则获取返回,找不到则什么都不做,也不报错。
  • 使用EL表达式进行运算
    • 逻辑运算
      • ${逻辑表达式}:&& || !
    • 算术运算
      • ${算术表达式}:+,-,*,/
    • 关系运算
      • ${关系表达式}:>,<,>=,==,!=,%
    • 特殊:三目运算
    • 注意:+表示加法运算,不表示字符链接。使用EL表达式进行字符链接会报错。
    • EL的空值判断:
      • ${empty 键名}
      • 作用:判断键名对象的值是否存有数据。
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        <%@page import="com.kylin.pojo.User"%>
        <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
        <!-- 使用传统方式获取作用域对象的数据 -->
        <h3>EL表达式学习:使用传统方式获取作用域对象的数据</h3>
        <b><%=request.getParameter("uname") %></b><br>
        <b><%=request.getAttribute("str") %></b><br>
        <b><%=((User)request.getAttribute("user")).getAddr().getTown() %> </b><br>
        <b><%=((ArrayList)request.getAttribute("list")).get(2) %> </b><br>
        <b><%=((User)(((ArrayList)request.getAttribute("list2")).get(0))).getAddr().getPre() %></b><br />
        <b><%=((HashMap)request.getAttribute("map")).get("c") %></b><br />
        <b><%=((User)(((HashMap)request.getAttribute("map2")).get("a1"))).getAddr().getCity() %></b><br />


        <%
        String str2="哈哈哈";
        %>
        <!-- 使用EL表达式获取作用域对象数据 -->
        <h3>EL表达式学习:使用EL表达式获取作用域对象的数据</h3>
        <b>${param.uname}</b><br />
        <b>${paramValues.fav[0]}</b><br />
        <b>${str}</b><br />
        <b>${user}</b><br />
        <b>${list[2]}</b><br />
        <b>${list2[0].addr.pre}</b><br />
        <b>${map.c}</b><br />
        <b>${map2.a1.addr.city}</b><br />
        <b>${str2}</b>
        <hr />
        <h3>EL的作用域查找顺序</h3>
        <%
        pageContext.setAttribute("hello","hello pageContext");
        request.setAttribute("hello","hello request");
        session.setAttribute("hello","hello session");
        application.setAttribute("hello","hello application");
        %>
        ${hello}<br>
        ${pageScope.hello}----${requestScope.hello}----${sessionScope.hello}------${applicationScope.hello}
        <h3>EL表达式的逻辑运算</h3>
        ${1+2}--${1*2}--${4/2}--${4-2}--${4%3}--${4==4}--${4>2}--${sex==1?'男':'女'}--${1+'2'}
        <h3>EL表达式的空值判断</h3>
        ${empty s}--${empty s1}--${empty s2}---${empty s3}
        <h3>EL获取请求头数据和Cookie数据</h3>
        ${header}--${headerValues["accept-language"][0]} <br /><br /><br />
        ${cookie}--${cookie.JSESSIONID}---${cookie.JSESSIONID.name}--${cookie.JSESSIONID.value}