Javaweb学习笔记之JSP(五):EL 表达式

05_EL.jsp 

<%@ page import="com.el.entity.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL 表达式</title>
</head>
<body>
    <%--
        EL 表达式语法:${变量或表达式}

        EL 表达式作用:
            jsp 核心语法:jsp表达式 和 jsp脚本;
            开发 jsp 的原则:尽量在 jsp 页面中少写 或不写 java 代码;
            那么就需要使用其他技术来替代 jsp表达式 和 jsp脚本;

            EL 表达式的作用就是用来替代 jsp 表达式,向浏览器输出 "域对象中的" 变量值 或表达式计算的结果;
                1、EL 表达式可以输出基本数据类型变量的值
                    1)、从 四个域 获取
                        ${name}
                    2)、从 指定域 获取
                        ${pageScope.name}
                        域范围:pageScope、requestScope、sessionScope、applicationScope;
                2、EL 表达式可以输出 对象 及其属性值
                3、EL 表达式可以输出集合数据(List 和 Map)
                4、EL 表达式可以输出 表达式计算的值

            用来替代 jsp 脚本的技术叫 JSP 标签,后面一节讲。
    --%>
    <%
        // 定义一个变量
        String name = "rose";
    %>
    JSP 表达式获取 name 变量的值:<%=name %><br>
    EL 表达式获取 name 变量的值:${name} <%-- 取不出来变量的值??因为EL表达式约定,只能获取 域对象中 变量的值 --%>
    <hr>

    <%
        // 将 name 变量放入 page 域中;(EL 表达式只能获取 域对象中 变量的值,放在哪个域都可以,相当于 findAttribute 方法)
        pageContext.setAttribute("name", name);
        // 将 age 变量放入 request 域中
        pageContext.setAttribute("age", "22", PageContext.REQUEST_SCOPE);
    %>
    EL 表达式从 域对象中 获取 name 变量的值:${name} <%-- 可以获取成功 --%>
    <hr>

    <%-- EL 表达式还可以从 指定的域中 获取数据 --%>
    EL 表达式从 page 域中获取数据:${pageScope.age}<br> <%-- 因为 age 变量在 request 域中,所以从 page 域中获取不到数据 --%>
    EL 表达式从 request 域中获取数据:${requestScope.age} <%-- 从 request 域中可以获取到数据 --%>
    <hr>

    <%--
        EL 表达式获取对象 及其属性值
    --%>
    <%
        // 实例化对象
        Student student = new Student("Jack", "21");
        // 将对象存入域对象中
        pageContext.setAttribute("student", student);
    %>
    student:${student}<br>              <%-- 输出对象 --%>
    student.name:${student.name}<br>    <%-- 输出对象的属性值 --%>
    student.age:${student.age}<br>
    <%--
        ${student.name} 等价于:<%=((Student)pageContext.findAttribute("student")).getName() %>>
        所以 ${student.name} 并不是直接获取 name 属性的值,而是调用 getName() 方法;
    --%>
    <hr>

    <%--
        EL 表达式获取 List 集合中的数据
    --%>
    <%
        // 定义一个 List 集合
        List<Student> list = new ArrayList<Student>();
        list.add(new Student("rose", "12"));
        list.add(new Student("Lucy", "22"));
        list.add(new Student("Lily", "32"));
        // 将 list 集合放入 域对象中
        pageContext.setAttribute("list", list);
    %>
    list[0]:${list[0]}<br>              <%-- 获取 List 集合中第一个元素对象 --%>
    list[1]:${list.get(1)}<br>          <%-- 获取 List 集合中第二个元素对象(和上面代码作用一样) --%>
    list[2].name:${list.get(2).name}    <%-- 获取 List 集合中第三个元素对象的name属性的值 --%>
    <hr>

    <%--
        EL 表达式获取 Map 集合中的数据
    --%>
    <%
        // 定义一个 Map 集合
        Map<String, Student> map = new HashMap<String, Student>();
        map.put("101", new Student("rose", "12"));
        map.put("102", new Student("Lucy", "22"));
        map.put("103", new Student("Lily", "32"));
        // 将 map 集合放入 域对象中
        pageContext.setAttribute("map", map);
    %>
    map["101"]:${map["101"]}<br>        <%-- 获取 map 集合中键值为 101 的对象 --%>
    map["102"]:${map.get("102")}<br>    <%-- 获取 map 集合中键值为 102 的对象,和上面代码的作用一样 --%>
    map["103"]:${map.get("103").name}   <%-- 获取 map 集合中键值为 103 的对象的 name 属性的值 --%>
    <hr>

    <%--
        EL 表达式获取 表达式的值
    --%>
    <%-- 算数运行: +  -  *  / --%>
    10 + 5 = ${10 + 5}<br>
    10 * 5 = ${10 * 5}<br>

    <%-- 比较运算:>  <  <=  >=  ==  != --%>
    10 > 5 = ${10 > 5}<br>

    <%-- 逻辑运算:&&(与)  ||(或)  !(非) --%>
    true && false:${true && false}<br>
    true || false:${true || false}<br>
    !true:${!true}<br>

    <%-- 判空:empty 变量;empty 既可以用来判断 null(空指针),也可以用来判断 空字符串("") --%>
    <%
        String username = "";      // 空字符串
//        String username = null;    // 空指针
        pageContext.setAttribute("username", username);
    %>
    判空:${username == null || username == ""}<br>
    empty判空:${empty username}
</body>
</html>

Student.java

package com.el.entity;

public class Student {
    private String name;
    private String age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Student() {
    }

    public Student(String name, String age) {
        this.name = name;
        this.age = age;
    }
}

输出结果:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值