JavaWeb 速通 EL 和 JSTL

news2024/9/23 19:23:59

目录

一、EL表达式

        1.快速入门 : 

            1.1 基本介绍

            1.2 入门案例

        2.常用输出形式 : 

            2.1 创建JavaBean类

            2.2 创建JSP文件

        3.empty运算符 : 

            3.1 介绍

            3.2 实例

        4.EL对象 : 

            4.1 EL11个内置对象

            4.2 域对象演示

            4.3获取HTTP信息

二、JSTL标签库

        1.基本介绍 : 

        2.core核心库常用标签 : 

            2.1

            2.2

            2.3 

            2.4 /c:forEach>


一、EL表达式

        1.快速入门 : 

            1.1 基本介绍

         EL 表达式全称:Expression Language,是表达式语言
        EL 表达式的主要作用是代替JSP页面的表达式脚本 <% =request.getAttribute("...") %>

         EL 表达式基本语法: ${key},形式上比传统的JSP表达式脚本更简洁。

            1.2 入门案例

                以intro.jsp为例,代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL expression</title>
</head>
<body>
    <%
        request.setAttribute("color", "pink");
    %>
    <%--
        PS : 若attribute为null,取出数据时,JSP方式返回"null",而EL表达式返回"".
     --%>
    <h1>传统JSP取出数据———</h1>
    color : <%= request.getAttribute("color") %> <br/>
    author : <%= request.getAttribute("author") %> <br><hr> <%--可使用三元运算符优化--%>

    <h1>采用EL表达式取出数据———</h1>
    color : ${color} <br/>
    author : ${author}
</body>
</html>

                运行结果 : 

        2.常用输出形式 : 

            2.1 创建JavaBean类

                Movie类代码如下 : 

package el;

import java.util.List;
import java.util.Map;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 * @what : 标准JavaBean类
 */
public class Movie {
    private String name;
    private int length;
    private List<String> platforms;
    private Map<String, String> comments;

    public Movie() {
    }

    public Movie(String name, int length, List<String> platforms, Map<String, String> comments) {
        this.name = name;
        this.length = length;
        this.platforms = platforms;
        this.comments = comments;
    }

    public String getName() {
        return name;
    }

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

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public List<String> getPlatforms() {
        return platforms;
    }

    public void setPlatforms(List<String> platforms) {
        this.platforms = platforms;
    }

    public Map<String, String> getComments() {
        return comments;
    }

    public void setComments(Map<String, String> comments) {
        this.comments = comments;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "name='" + name + '\'' +
                ", length=" + length +
                ", platforms=" + platforms +
                ", comments=" + comments +
                '}';
    }
}

            2.2 创建JSP文件

                output.jsp文件代码如下 : 

<%@ page import="el.Movie" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL output</title>
</head>
<body>
    <h1>输出Movie对象的信息</h1>
    <%
        Movie movie = new Movie();
        movie.setName("Matrix");
        movie.setLength(150);

        ArrayList<String> platforms = new ArrayList<>();
        platforms.add("Bilibili");
        platforms.add("YouTube");
        platforms.add("Youku");
        movie.setPlatforms(platforms);

        HashMap<String, String> comments = new HashMap<>();
        comments.put("Cyan", "It's a so nice film!");
        comments.put("Rain", "I like it!");
        comments.put("Ice", "Pretty good!");
        movie.setComments(comments);

        //将movie对象放入request域对象中
        request.setAttribute("movie", movie);
    %>
    <%-- 取出数据 --%>
    Movie.name = ${movie.name} <br/>
    Movie.length = ${movie.length} <br/>

    Movie.platforms = ${movie.platforms} <br/>
    Movie.platforms[2] = ${movie.platforms[2]} <br/>
    Movie.platforms[2] = ${movie.platforms.get(2)} <br/>

    Movie.comments = ${movie.comments} <br/>
    Movie.comments_Cyan = ${movie.comments.get("Cyan")} <br/>
    Movie.comments_Rain = ${movie.comments["Rain"]} <br/>
</body>
</html>

                运行结果 : 

        3.empty运算符 : 

            3.1 介绍

         empty 运算可以判断一个数据是否为空,如果为空,返回true,否则返回false

        2° 以下几种情况为空——
          
● value = null
          ● value = ""
          ● value = new Object[] {} (长度为0的Object数组)
          ● 元素个数为0 的List集合
          ● 元素个数为0 的Map集合

            3.2 实例

                empty.jsp代码如下 : 

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>empty expression</title>
</head>
<body>
    <%
        request.setAttribute("key1", null);
        request.setAttribute("key2", "");
        request.setAttribute("key3", new Object[]{});
        request.setAttribute("key4", new ArrayList<>());
        request.setAttribute("key5", new HashMap<>());
    %>
    <%-- 判断是否为空 --%>
    key1是否为空: ${empty key1} <br/>
    key2是否为空: ${empty key2} <br/>
    key3是否为空: ${empty key3} <br/>
    key4是否为空: ${empty key4} <br/>
    key5是否为空: ${empty key5}
</body>
</html>

                运行结果 : 

        4.EL对象 : 

            4.1 EL11个内置对象

                如下表格所示 : 

变量类型说明
pageContextPageContextImpl获取JSP中的九大内置对象
pageScopeMap<String, Object>获取pageContext域中的数据
requestScopeMap<String, Object>获取request域中的数据
sessionScopeMap<String, Object>获取Session域中的数据
applicationScopeMap<String, Object>获取ServletContext域中的对象
paramMap<String, String>获取请求参数的值
paramValuesMap<String, String[]>获取多个值
headerMap<String, String>获取请求头的信息
headerValuesMap<String, String[]>获取请求头的多个信息
cookieMap<String, Cookie>获取当前请求的Cookie信息
initParamMap<String, String>获取在web.xml中配置的<context-param>上下文参数

            4.2 域对象演示

                elScope.jsp代码如下 : 

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL scope</title>
</head>
<body>
    <%
        pageContext.setAttribute("color", "cyan");
        request.setAttribute("color", "pink");
        session.setAttribute("color", "cornflower_blue");
        application.setAttribute("color", "lightyellow");
    %>
    pageContext域_color = ${pageScope.color} <br/>
    request域_color = ${requestScope.color} <br/>
    session域_color = ${sessionScope.color} <br/>
    ServletContext域_color = ${applicationScope.color}
</body>
</html>

                运行结果 : 

            4.3获取HTTP信息

                http.jsp代码如下 : 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>pageContext demo</title>
</head>
<body>
<h1>pageContext对象获取HTTP信息</h1>
<hr/>
<%  //简化形式(将request域对象放入pageContext域中)——— JSP
    pageContext.setAttribute("req", request);
%>
协议: ${ pageContext.request.scheme }<br>
协议: ${ req.scheme }<br>
服务器 ip:${ req.serverName }<br>
服务器端口:${ req.serverPort }<br>
工程路径:${ req.contextPath }<br>
请求方法:${ req.method }<br>
客户端 ip 地址:${ req.remoteHost }<br>
会话 id :${ pageContext.session.id }<br>
</body>
</html>

                运行结果 : 


二、JSTL标签库

        1.基本介绍 : 

         JSTL标签库是指 JSP Standard Tag Library,即JSP标准标签库。

        EL 表达式是为了替换JSP中的表达式脚本<%=%>, JSTL 是为了替换JSP中的代码脚本<%%>
        JSTL 由五个标签库组成——
功能范围URI前缀
核心标签库http://java.sun.com/jsp/jstl/corec
格式化http://java.sun.com/jsp/jstl/fmtfmt
函数http://java.sun.com/jsp/jstl/functionsfn
数据库(不使用http://java.sun.com/jsp/jstl/sqlsql
XML(不使用http://java.sun.com/jsp/jstl/xmlx

        使用JSTL需要导入jar包(impl 和 spec),PS : Tomcat10版本对jar包的依赖有变化(jakarta)导入jar包后要重新启动Tomcat。下载jar包的网址如下 : 

Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations

         taglib引入标签,要放在行首

        2.core核心库常用标签 : 

            2.1 <c:set></c:set>

        (1) <c:set></c:set> 标签可以向域中保存数据,等价于——域对象.setAttribute(key,value);

        (2)   scope 属性设置保存到哪个域
                page 表示 PageContext 域(默认值)
                request 表示 Request
                session 表示 Session
                application 表示 ServletContext
        (3) var 属性用于设置 key(键)
        (4) value 属性用于设置 value(值)

            2.2 <c:if></c:if>

        (1) <c:if></c:if>标签用来做 if 判断。
        (2) 其中的test 属性表示判断的条件 (用 EL 表达式输出)

            2.3 <c:choose> <c:when> <c:otherwise>

        (1) 使用格式如下——

< c :choose >
        < c :when test =" ${ requestScope .score   >=  90  } " >
                <h1>牛逼~</h1>
        </ c :when >
        < c :when test =" ${ requestScope . score  >= 80   } " >
                <h1>还不错~</h1>
        </ c :when >
        < c :otherwise >
                <h1>飞舞!</h1>
        </ c :otherwise >
</ c :choose >
        (2) 如果使用EL表达式取数据时,没有指定域范围,默认是从小到大找。

            2.4 <c : forEach>/c:forEach>

        (1) <c:forEach></c:forEach>标签用来 遍历输出, 主要有以下四种遍历形式——
                ● 普通遍历输出 i 到 j (前闭后闭)
                ● 遍历数组
                ● 遍历 Map
                ● 遍历 List
        (2) 相关属性——
                1> 普通遍历 :
                        begin 属性设置开始的索引
                        end 属性设置结束的索引
                        step 属性表示遍历的步长值
                        var 属性表示循环的变量(也是当前正在遍历到的数据)
                2> 遍历数组 : 

                        items 遍历的集合
                        var 遍历到的数据 (类似于增强for;输出时会自动锁定所在域

                        eg : 
                        <%
                                request.setAttribute("books", new String[]{"哈利波特", "指环王"});
                        %>
                        <c:forEach items ="${requestScope.books}" var ="book">
                                bookName = ${book} <br/>
                        </c:forEach>
                3> 遍历Map集合 :
                        eg : 
                        <%
                                Map<String, String> students = new HashMap<>();
                                map.put("Cyan", "425");
                                map.put("Rain", "400");
                                map.put("Ice", "430");
                                request.setAttribute("students", students);
                        %>
                        <c:forEach items="${requestScope.students}" var="student">
                                Student's Info = ${student.key} --- ${student.value} <br/>
                        </c:forEach>
                4> 遍历List集合 : 
                        Δ遍历List集合与遍历Map集合时的步骤类似,都像Java 中的增强for循环结构。
                        varStatus 属性表示当前遍历到的数据的状态,可以得到 step,begin,end 等属性值
                        PS : 需要对应的JavaBean类提供相应的getXxx方法

        System.out.println("END----------------------------------------------------------------------------------------------------------------------");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 一个注解实现限流

在Java中&#xff0c;可以使用自定义注解来实现限流功能。 java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; Retention(RetentionPolicy.RUNTIME…

【数据结构】 ArrayList简介与实战

文章目录 什么是ArrayListArrayList相关说明 ArrayList使用ArrayList的构造无参构造指定顺序表初始容量利用其他 Collection 构建 ArrayListArrayList常见操作获取list有效元素个数获取和设置index位置上的元素在list的index位置插入指定元素删除指定元素删除list中index位置上…

redis-集群(基础了解)

前言 为什么要做集群&#xff1f;解决什么问题&#xff1f; 1、避免单点故障&#xff0c;实现高可用&#xff1b;就需要数据沉余&#xff0c;通过沉余副本也是slave。 三种集群区别&#xff1f; 1、主从复制 复制策略 --> 全量复制 第一次连接到master&#xff0c;mast…

Mysql整理一 基础知识/常见面试题

一、基础概念 1. 索引 之前的文章已经写过了&#xff0c;比较细 数据库索引含义,类别,用法,创建方式_表结构加树形id和索引是为什么_马丁•路德•王的博客-CSDN博客 简单概括就是在表的某个列或者多个列或者联合表的时候加个索引&#xff0c;类似图书馆书本的索引编号&…

git环境超详细配置说明

一&#xff0c;简介 在git工具安装完成之后&#xff0c;需要设置一下常用的配置&#xff0c;如邮箱&#xff0c;缩写&#xff0c;以及git commit模板等等。本文就来详细介绍些各个配置如何操作&#xff0c;供参考。 二&#xff0c;配置步骤 2.1 查看当前git的配置 git conf…

pyqt5 第一个程序

import sys from PyQt5.QtWidgets import QApplication, QWidgetif __name__ __main__:# 创建 QApplication 实例app QApplication(sys.argv)# 创建一个主窗口w QWidget()# 设置大小w.resize(400, 200)# 设置窗口标题w.setWindowTitle(第一个程序)# 显示窗口w.show()# 固定写…

Arcgis连续数据的分类(求不同值域的面积)

问题描述&#xff1a;如果得到的一个连续的影响数值数据&#xff0c;但是我们想求取某一段值域的面积占比&#xff0c;需要进行以下操作&#xff1a; 1.按照数值重分类&#xff0c;将某段数值变成一个类别 2.栅格转矢量&#xff0c;再求取面积

第7章:贝叶斯分类器

贝叶斯决策论 贝叶斯分类器&#xff1a;使用贝叶斯公式 贝叶斯学习&#xff1a;使用分布估计&#xff08;不同于频率主义的点估计&#xff09; 极大似然估计 朴素贝叶斯分类 半朴素贝叶斯 条件独立性假设&#xff0c;在现实生活中往往很难成立。 半朴素贝叶 斯的一个常用策略…

学习ts(四)联合类型、交叉类型、类型断言

联合类型 使用联合类型定义属性和方法&#xff0c;只要符合其中一种即可 let myPhone: string | number 010-7788 // let myPhone1: string | number true 因为没有包含boolean值 会报错const fn (something: number | boolean): boolean > {return !!something }con…

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理

Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 目录 Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理&#xff08;包括词的属性处理&#xff09;的简单整理 一、简单介绍 二、实现原理…

Python入门【装饰器​编辑、多个装饰器 、带参数的装饰器、生成器、 生成器定义、 迭代器】(二十八)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

教你10分钟快速上手Docker基础操作

一、docker平台组成 docker最核心的组件是&#xff1a;镜像、容器、仓库 二、常用基础命令 1、镜像操作 &#xff08;1&#xff09;拉取镜像 查找指定镜像&#xff1a;docker search 镜像名字 [rootclient ~]# docker search centos NAME …

VirtualBox安装CentOS8.5

0 环境 win10 virtualbox版本 版本 7.0.10 r158379 (Qt5.15.2) 1.镜像下载 阿里镜像站 https://developer.aliyun.com/mirror/ 1.1 找到安装包下载地址 1.2 找到8.5版本 1.3 iso 再然后 1.4 选择安装包 我这里选的是最小安装包&#xff0c;centOS8.5最小安装版本&#…

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~4.导出模型(亲测有效)

保姆级教程&#xff0c;看这一篇就够用了。 在翻阅了网络上很多资料后&#xff0c;发现很多版本的信息比匹配。 花了一周的时间配置环境&#xff0c;以及环境验证&#xff0c;然后写了这篇长文。 有过程&#xff0c;有代码&#xff0c;有经验&#xff0c;欢迎大家批评指正。 一…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容&#xff0c;jdk11、jdk17都是LTS长期维护版本&#xff0c;而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

Linux 终端会话中,启动任务并放到后台运行

一、需求 linux要执行一个脚本&#xff0c;耗时很长&#xff0c;想要脚本在后台运行&#xff0c;用户注销或终端软件关闭时也可以继续运行。 二、实现 1、nohup命令 脚本在后台运行 nohup 是在 Linux 和类 Unix 系统中使用的一个命令&#xff0c;用于在后台运行程序&#x…

【ES6】—解构赋值

一、定义 解构赋值&#xff1a;解构赋值就是一种模式的匹配&#xff0c;只要等号两边的模式完全相同的&#xff0c;那么左边的变量就会被赋值对应右边的值 二、数组的解构赋值 PS&#xff1a;数组解构赋值时&#xff0c;是通过索引的唯一性赋值的 1. 一维数组解构赋值 (1)…

亿赛通电子文档安全管理系统任意文件上传漏洞(2023-HW)

亿赛通电子文档安全管理系统任意文件上传漏洞 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现小龙POC检测 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果…

ADIS16470和ADIS16500从到手到读出完整数据,附例程

由于保密原因&#xff0c;不能上传我这边的代码&#xff0c;我所用的开发环境是IAR&#xff0c; 下边转载别的博主的文章&#xff0c;他用的是MDK 下文的博主给了你一个很好的思路&#xff0c;特此提出表扬 最下方是我做的一些手册批注&#xff0c;方便大家了解这个东西 原文链…

Github下载任意版本的VsCode

下载历史版本VsCode(zip) 下载链接由三部分组成&#xff1a; 固定部分commit idVSCode-win32-x64-版本号.zip 固定部分&#xff1a; https://vscode.cdn.azure.cn/stable/ Commit id&#xff1a; 打开 vscode的GitHub&#xff1a;[https://github.com/microsoft/vscode/r…