EL表达式

基本概念

EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据并输出。

主要功能

  • 依次访问pageContext、request、session和application作用域对象存储的数据。
    • 若属性名相同,只能按顺序取到作用域最小的那个值
    • 可用pageScope、requestScope、sessionScope、applicationScope指定作用域
  • 获取请求参数值。
  • 访问Bean对象的属性。
  • 访问集合中的数据。
  • 输出简单的运算结果。
访问内置对象的数据
  • JSP:<%=request.getAttribute(“ varName”)%>

  • EL:${ varName}

    • 属性名相同时指定作用域:${pageScope.varName}
    <%--
      Created by IntelliJ IDEA.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现从内置对象中获取数据并打印</title>
    </head>
    <body>
    <%
        /*pageContext.setAttribute("name1", "pageContext对象中的属性值:zhangfei");
        request.setAttribute("name2", "request对象中的属性值:guanyu");
        session.setAttribute("name3", "session对象中的属性值:liubei");
        application.setAttribute("name4", "session对象中的属性值:zhaoyun");*/
        
        pageContext.setAttribute("name", "pageContext对象中的属性值:zhangfei");
        request.setAttribute("name", "request对象中的属性值:guanyu");
        session.setAttribute("name", "session对象中的属性值:liubei");
        application.setAttribute("name", "session对象中的属性值:zhaoyun");
    %>
    
    <%-- 使用JSP中原始方式获取数据和打印 --%>
    <%= "name1的数值为:" + pageContext.getAttribute("name1") %><br/>
    <%= "name2的数值为:" + request.getAttribute("name2") %><br/>       
    <%= "name3的数值为:" + session.getAttribute("name3") %><br/>       
    <%= "name4的数值为:" + application.getAttribute("name4") %><br/> 
        
    <%-- 使用EL表达式实现获取数据和打印 --%>
    <%--<h1>name1的数值为:${name1}</h1><br/>
    name2的数值为:${name2}<br/>
    name3的数值为:${name3}<br/>
    name4的数值为:${name4}<br/>--%>
        
    <h1>name的数值为:${name}</h1><br/> <%--pageContext对象中的属性值:zhangfei--%>
    ${requestScope.name} <%--request对象中的属性值:guanyu--%>
    </body>
    </html>
    
访问请求参数的数据
  • JSP:
    • request.getParameter(name);
    • request.getParameterValues(name);
  • EL:
    • param:接收的参数只有一个值
      • 获取指定参数的数值:${param.name}
    • paramValues:接受的参数有多个值
      • 获取指定参数中指定下标的数值:${paramValues.hobby[0]}
访问Bean对象的属性
  • 方式一: $ { 对象名 . 属性名 },例如:${user.name}
  • 方式二: $ { 对象名 [“属性名”] },例如:${user[“name”]}
主要区别
  • 当要存取的属性名中包含一些特殊字符,如: . 或 ,等并非字母或数字的符号,就一定要使用 [ ] 而不是 . 的方式

  • 使用[]的方式可以动态取值,具体方式如下:

    <%
    	request.setAttribute(“prop”,“age”);
    %>
    <!-- 相当于表达式中写一个变量 -->
    ${ user[prop] } <!-- 得到age属性的值 -->
    
访问集合中的数据
  • List集合:${list[0]}

  • student为ArrayList类型的对象:${student[0].name} 获取指定属性

  • Map集合 不支持下标:${map} / ${map[“keyName”]}

    <%@ page import="java.util.LinkedList" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.HashMap" %>
    <%@ page import="java.util.Map" %>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>实现集合中数据内容的获取和打印</title>
    </head>
    <body>
        <%
            // 准备一个List集合并添加数据内容
            List<String> list = new LinkedList<>();
            list.add("two");
            list.add("one");
            list.add("three");
            // 将整个集合放入指定的内置对象中
            pageContext.setAttribute("list", list);
    
            // 准备一个Map集合并添加数据
            Map<String, Integer> map = new HashMap<>();
            map.put("one", 1);
            map.put("two", 2);
            map.put("th.ree", 3);
            // 将整个集合放入指定的内置对象中
            pageContext.setAttribute("map", map);
        %>
    
        <%-- 使用EL表达式实现集合中数据内容的获取 --%>
        集合中下标为0的元素是:${list[0]}<br/>    <%-- two --%>
        集合中下标为1的元素是:${list[1]}<br/>    <%-- one --%>
        集合中下标为2的元素是:${list[2]}<br/>    <%-- three --%>
        <hr/>
        <%-- 使用EL表达式实现Map集合中数据内容的获取 不支持下标 --%>
        整个Map集合中的元素有:${map}<br/>
        获取带有特殊字符key对应的数值为:${map["th.ree"]}<br/>   <%-- 3 --%>
    </body>
    </html>
    
常用的运算符
常用的算术运算符
<%@ page import="java.util.List" %>
<%@ page import="java.util.LinkedList" %>
<%@ page import="java.util.Arrays" %><%--
  Created by IntelliJ IDEA.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>实现常用运算符的使用</title>
</head>
<body>
<%
    // 通过内置对象设置属性的方式来准备操作数
    request.setAttribute("ia", 5);
    request.setAttribute("ib", 2);
    request.setAttribute("b1", true);
    request.setAttribute("b2", false);
%>

<%-- 实现上述所有操作数的获取和打印 --%>
ia的数值为:${ia}<br/>      <%-- 5 --%>
ib的数值为:${ib}<br/>      <%-- 2 --%>
b1的数值为:${b1}<br/>      <%-- true --%>
b2的数值为:${b2}<br/>      <%-- false --%>
<hr/>

<%-- 实现算术运算符的使用 --%>
ia+ib的结果为:${ia+ib}<br/>    <%-- 7 --%>
ia-ib的结果为:${ia-ib}<br/>    <%-- 3 --%>
ia*ib的结果为:${ia*ib}<br/>    <%-- 10 --%>
ia/ib的结果为:${ia/ib}<br/>    <%-- 2.5 --%>
ia%ib的结果为:${ia%ib}<br/>    <%-- 1 --%>

</body>
</html>
常用的关系运算符
ia大于ib的结果为:${ia > ib}<br/>  <%-- true --%>
ia大于等于ib的结果为:${ia >= ib}<br/>  <%-- true --%>
ia小于ib的结果为:${ia < ib}<br/>  <%-- false --%>
ia小于等于ib的结果为:${ia <= ib}<br/>  <%-- false --%>
ia等于ib的结果为:${ia == ib}<br/>  <%-- false --%>
ia不等于ib的结果为:${ia != ib}<br/>  <%-- true --%>
常用的逻辑运算符
b1并且b2的结果为:${b1 && b2}<br/>  <%-- false --%>
b1或者b2的结果为:${b1 || b2}<br/>  <%-- true --%>
b1取反的结果为:${ !b1 }<br/>  <%-- false --%>
b2取反的结果为:${ !b2 }<br/>  <%-- true --%>
条件运算符
ia和ib之间的最大值为:${ia>ib? ia: ib}
验证运算符

${empty 表达式}

返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。

<%
    String str1 = null;
    String str2 = "";
    String str3 = "hello";

    List<Integer> list1 = new LinkedList<>();
    List<Integer> list2 = Arrays.asList(11, 22, 33, 44, 55);

    request.setAttribute("str1", str1);
    request.setAttribute("str2", str2);
    request.setAttribute("str3", str3);
    request.setAttribute("list1", list1);
    request.setAttribute("list2", list2);

%>

判断是否为空的结果是:${empty str1}<br/>    <%-- true --%>
判断是否为空的结果是:${empty str2}<br/>    <%-- true --%>
判断是否为空的结果是:${empty str3}<br/>    <%-- false --%>
判断是否为空的结果是:${empty list1}<br/>    <%-- true --%>
判断是否为空的结果是:${empty list2}<br/>    <%-- false --%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值