EL表达式&JSTL标签库1

简介: EL表达式&JSTL标签库1

1.EL表达式

【尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版-哔哩哔哩】https://b23.tv/1kEshd

a) 什么是EL表达式,EL表达式的作用?

EL表达式的全称是:Exressin Language.是表达式语言。
EL表达式的什么作用:EL表达式主要是代替jsp页面中的表达式脚本在js页面中进行数据的输出。 因为E表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多。

演示:

新建模块09_EL_JSTL,add web ,

建Tomcat实例,
在Web-INF/lib下导入servlet.jar包和jsp.jar包 为模块服务

在web下创建a.jsp

a.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 12:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("key","值");//加入servlet.jar包
    %>
  表达式脚本输出key的是:<%=request.getAttribute("key")%><br/><%--  key1--->null--%>
  表达式脚本输出key的是:<%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%><br/>
  EL表达式输出key的值是:${key}
  EL表达式输出key的值是:${key1}<%--  key1--->  --%>
</body>
</html>

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

E表达式在输出null值的时候,输出的是空串。

jsp表达式脚本输出nul值的时候,输出的是null字符串。

b)EL表达式搜索域数据的顺序 EL表达式主要是在jsp页面中输出数据。

主要是输出域对象中的数据。

当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。

b.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 12:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        //往四个域中保存了相同的key的数据
        request.setAttribute("key","request");//导入jsp.jar包
        session.setAttribute("key","session");
        application.setAttribute("key","application");
        pageContext.setAttribute("key","pageContext");
    %>
    ${key}<%--pageContext依次注掉pageContext-->request-->session(注掉还要session之后关闭浏览器)-->application(注掉还要application之后重启或重新部署服务器),会依次输出request-->session-->application-->空串--%>
</body>
</html>

c)EL表达式输出Bean的普通属性,数组属性。List集 合属性,map集合属性

i.需求一输出Person类中普通属性,数组属性。list集合属性和map集合属性。

在scr/com.pojo新建Person类

Person

package com.pojo;
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;
//    private int age=18;
    public int getAge() {
        return 18;
    }
    public Person() {
    }
    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 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 +
                '}';
    }
}

c.jsp

<%@ page import="com.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 12:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
      Person person=new Person();
      person.setName("我好帅");
      person.setPhones(new String[]{"18610541354","18688886666","18699998888"});
      List<String> cites= new ArrayList<>();
      cites.add("北京");
      cites.add("上海");
      cites.add("深圳");
      person.setCities(cites);
      Map<String,Object>map=new HashMap<>();
      map.put("key1","value1");
      map.put("key2","value2");
      map.put("key3","value3");
      person.setMap(map);
      pageContext.setAttribute("p",person);
    %>
    输出Person:${p}<br/>
    输出Person的name属性:${p.name}<br/>
    输出Person的phones数组元素值:${p.phones[2]}<br/>
    输出Person的cities集合中的元素值:${p.cities}<br/>
    输出Person的list集合中的个别元素值:${p.cities[2]}<br/>
    输出Person的map集合:${p.map}<br/>
    输出Person的map集合中某个key的值:${p.map.key3}<br/>
    输出Person的age属性:${p.age}<br/><%--如果没有age属性,有其getAge方法,还是可以输出18--%>
</body>
</html>

d)EL 表达式——运算

语法:$运算表达式}, EL表达式支持如下运算符:

1)关系运算



2)逻辑运算



3)算数运算


d.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 01:12
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${12 == 12}或${12 eq 12}<br/>
    ${12 != 12}或${12 ne 12}<br/>
    ${12  < 12}或${12 lt 12}<br/>
    ${12  > 12}或${12 gt 12}<br/>
    ${12 <= 12}或${12 le 12}<br/>
    ${12 >= 12}或${12 ge 12}<br/>
    <hr/>
    ${12 == 12 && 12 > 11} 或 ${12 == 12 and 12 > 11}<br/>
    ${12 == 12 || 12 > 11} 或 ${12 == 12  or 12 > 11}<br/>
    ${ ! true } 或 ${not true}<br/>
    <hr/>
    ${12 + 12}<br/>
    ${12 - 12}<br/>
    ${12 * 12}<br/>
    ${18 / 12} 或 ${18 div 12}<br/>
    ${18 % 12} 或 ${18 mod 12}<br/>
</body>
</html>

i.empty运算

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

以下几种情况为空:
1、值为null值的时候,为空

2、值为空串的时候,为空

3、值是object类型数组,长度为零的时候

4、list集合,元素个数为零

5、map集合,元素个数为零

ii.三元运算

表达式1?表达式2:表达式3

如果表达式1的值为真,返回表达式2的值,如果表达式1的值为假,返回表达式3的值。

e.jsp

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 01:21
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
//        1、值为null值的时候,为空
        request.setAttribute("emptyNull",null);
//        2、值为空串的时候,为空
        request.setAttribute("emptyString","");
//        3、值是object类型数组,长度为零的时候
        request.setAttribute("emptyArray",new Object[]{});
//        4、list集合,元素个数为零
        List<String> list = new ArrayList<>();
        request.setAttribute("emptyList",list);
//        5、map集合,元素个数为零
        Map<String,Object> map=new HashMap<>();
        request.setAttribute("emptyMap",map);
    %>
    ${empty emptyNull}<br/>
    ${empty emptyString}<br/>
    ${empty emptyArray}<br/>
    ${empty emptyList}<br/>
    ${empty emptyMap}<br/>
    <hr/>
    ${12 == 12 ? "我好帅":"你骗人"}
</body>
</html>

iii. “.”点运算和[]中括号运算符

点运算,可以输出Bean对象中某个属性的值。

[]中括号运算,可以输出有序集合中某个元素的值。

并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值。

f.jsp

<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/17
  Time: 下午 01:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Map<String,Object> map=new HashMap<>();
        map.put("a.a.a","aaaValue");
        map.put("b+b+b","bbbValue");
        map.put("c-c-c","cccValue");
        request.setAttribute("map",map);
    %>
    ${map['a.a.a']}<br>
    ${map["b+b+b"]}<br>
    ${map.c-c-c}<br>
</body>
</html>
相关文章
|
JSON 数据库 数据格式
uniCloud查询数据库
uniCloud查询数据库
311 0
|
存储 缓存 JSON
第九篇 API设计原则与最佳实践
第九篇 API设计原则与最佳实践
291 1
|
数据采集 JSON 数据格式
深入解析:使用Python爬取Bilibili视频
本文介绍了如何使用Python编写脚本自动化下载Bilibili视频。通过requests等库获取视频和音频URL,使用ffmpeg合并音视频文件,最终实现高效下载。注意遵守网站爬虫政策和法律法规。
1729 4
|
人工智能 运维 自然语言处理
阿里云百炼
阿里云百炼支持多语言模型,适用于不同问答场景。初始内置问答基础上,用户可上传文档定制应用,针对每个项目“投喂”特定知识,优化答案检索,降低运维成本。模型管理允许关联不同知识库和设置敏感词以保护隐私。计费依据模型类型,大语言模型按Input和Output Token数,语音识别按时长计费。输入和输出分别计费,考虑资源消耗差异。
|
运维 Cloud Native 测试技术
极氪汽车 APP 系统云原生架构转型实践
极氪汽车 APP 系统云原生架构转型实践
2608 109
极氪汽车 APP 系统云原生架构转型实践
|
存储 算法 C++
韵动代码:C++数组实践与应用之路2
韵动代码:C++数组实践与应用之路
|
Java 应用服务中间件 Linux
详解在Linux系统中安装Tomcat
本文以在CentOS 7.6中安装Tomcat8.5为例进行安装,其他系统和版本都是大同小异的。
248 0
|
8天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1400 10
|
8天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1257 5

热门文章

最新文章