动态网站开发讲课笔记07:EL和JSTL

news2024/9/23 7:22:14

文章目录

  • 零、本节学习目标
  • 一、EL
    • (一)EL基本语法
      • 1、EL的概念
      • 2、EL的语法
      • 3、案例演示
        • (1)用EL读取保存的信息
        • (2)使用Java代码与EL获取信息的对比
      • 4、EL基本语法的特点
    • (二)EL中的标识符
      • 1、EL中标识符的规范
      • 2、EL中标识符的示例
        • (1)合法标识符
        • (2)非法标识符
    • (三)EL中的关键字
    • (四)EL中的变量
      • 1、基本概念
      • 2、简单示例
    • (五)EL中的常量
      • 1、布尔常量
      • 2、整型常量
      • 3、浮点型常量
      • 4、字符串常量
      • 5、Null常量
    • (六)EL访问数据
      • 1、EL的点运算符
      • 2、方括号运算符
      • 3、EL运算法的应用
    • (七)EL中的运算符
      • 1、算术运算符
      • 2、比较运算符
      • 3、逻辑运算符
      • 4、empty运算符
      • 5、条件运算符
      • 6、小括号运算符
      • 7、运算优先级
  • 二、EL隐式对象
  • 三、JSTL
  • 四、JSTL中的Core标签库

零、本节学习目标

  1. 掌握EL的基本语法
  2. 熟悉EL中常见的隐式对象
  3. 了解JSTL标签库
  4. 熟悉JSTL的下载与使用
  5. 掌握Core标签库中的常用标签

前面我们学习了JSP页面,在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要书写很多Java代码,这样的话会使JSP页面混乱。为了降低JSP页面的复杂度,增强代码的重用性,Sun公司制定了一套标准标签库JSTL,同时为了获取Servlet域对象中存储的数据,JSP2.0规范还提供了EL(表达式语言),大大降低了开发的难度。本节将针对EL以及JSTL标签库进行详细讲解。

一、EL

(一)EL基本语法

  • 目标:掌握EL的基本语法

1、EL的概念

  • EL全称为Expression Language,即表达式语言。它是JSP 2.0引入的一个新内容。EL可以简化JSP开发中的对象引用,从而规范页面代码,增加程序的可读性及可维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发JavaWeb应用的新途径。

2、EL的语法

  • EL的语法非常简单,都是以“${”符号开始,以“}”符号结束的
  • 语法格式:${表达式}
  • ${表达式}”中的表达式必须符合EL语法要求。
  • 由于EL的语法以“${" 开头,如果在JSP网页中要显示“${“字符串,必须在前面加上“\”符号,即“\${”,或者写成“${${}“, 也就是用表达式输出“${” 符号。

3、案例演示

(1)用EL读取保存的信息

  • 创建Java Enterprise项目 - ELJSTLDemo
    在这里插入图片描述
  • 单击【Finish】按钮
    在这里插入图片描述
  • 修改Artifact名称
    在这里插入图片描述
  • 重新部署项目
    在这里插入图片描述
  • 修改首页
    在这里插入图片描述
  • 启动服务器,查看结果
    在这里插入图片描述
  • 创建net.huawei.servlet包,在包里创建ServletDemo01
    在这里插入图片描述
package net.huawei.servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 功能:保存request属性,请求转发到指定页面
 * 作者:华卫
 * 日期:2023年04月20日
 */
@WebServlet(name = "ServletDemo01", urlPatterns = "/demo01")
public class ServletDemo01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 保存request属性
        request.setAttribute("username", "无心剑");
        request.setAttribute("password", "903213");
        // 获取请求转发器,转发到`demo01.jsp`页面
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo01.jsp");
        // 请求转发
        dispatcher.forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
}
  • web目录里创建demo01.jsp页面
    在这里插入图片描述
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>demo01</title>
    </head>
    <body>
        使用JSP表达式获取属性:<br />
        用户名:<%=request.getAttribute("username")%> <br />
        密码:<%=request.getAttribute("password")%> <br />
        <hr />
        使用EL获取属性:<br />
        用户名:${username} <br />
        密码:${password} <br />
    </body>
</html>
  • 启动服务器,访问http://localhost:8080/ELJSTLDemo/demo01
    在这里插入图片描述

(2)使用Java代码与EL获取信息的对比

  • 由上图中可知,使用EL同样可以成功获取Servlet中存储的数据,但EL明显简化了JSP页面的书写,使程序简洁易维护。另外,当域对象里面的值不存在时,使用EL获取域对象里面的值时返回空字符串;而使用Java方式获取时,如果返回值是null,会报空指针异常,所以在实际开发中推荐使用EL的方式获取域对象中存储的数据。

4、EL基本语法的特点

(1)EL可以与JavaScript语句结合使用。
(2)EL可以自动进行类型转换。如果想通过EL获取两个字符串数值(如number1和number2)的和,可以直接通过“+”符号进行连接(如$ {number1 + number2})。
(3)EL不仅可以访问一般变量,还可以访问JavaBean中的属性、嵌套属性和集合对象。
(4)在EL中,可以执行算术运算、逻辑运算、关系运算和条件运算等。
(5)在EL中,可以获取pageContext对象,进而获取其他内置对象。
(6)在使用EL进行除法运算时,如果除数为0,则返回表示无穷大的Infinity,而不返回错误。
(7)在EL中,可以访问JSP的作用域(pagerequestsessionapplication)。

(二)EL中的标识符

  • 目标:熟悉EL中的标识符

1、EL中标识符的规范

  • 在EL中,经常需要使用一些符号标记一些名称,如变量名、自定义函数名等,这些符号被称为标识符。EL中的标识符可以由任意的大小写字母、数字和下划线组成,为了避免出现非法的标识符,在定义标识符时还需要遵循以下规范。
    (1)不能以数字开头。
    (2)不能是EL中的关键字,如andorgt等。
    (3)不能是EL隐式对象,如pageContext
    (4)不能包含单引号(')、双引号(")、减号(-)和正斜线(/)等特殊字符。

2、EL中标识符的示例

(1)合法标识符

username
username123
user_name
_userName

(2)非法标识符

123username
or
user"name
pageContext

(三)EL中的关键字

  • 目标:熟悉EL中的关键字
  • 关键字就是编程语言里事先定义好并赋予了特殊含义的单词,和其他语言一样,EL中也定义了许多关键字,如falsenot等。
  • EL所有的关键字
1234
andeqgttrue
instanceofornele
falseemptynotlt
genulldivmod

(四)EL中的变量

  • 目标:熟悉EL中的变量

1、基本概念

  • EL中的变量就是一个基本的存储单元,EL中的变量不用事先定义就可以直接使用。EL可以将变量映射到一个对象上。

2、简单示例

${message}
  • 在上述示例中,message就是一个变量,通过表达式${message}就可以访问变量message的值。

(五)EL中的常量

  • 目标:熟悉EL中的常量

1、布尔常量

  • 布尔常量用于区分一个事物的正反两面,它的值只有两个,分别是truefalse

2、整型常量

  • 整型常量与Java中的十进制的整型常量相同,它的取值范围是Java语言中定义的常量·Long.MIN_VALUE·到·Long.MAX_VALUE·之间,即 [ − 2 63 , 2 63 − 1 ] [-2^{63}, 2^{63}-1] [263,2631]之间的整数。

3、浮点型常量

  • 浮点数常量用整数部分加小数部分表示,也可以用指数形式表示,例如,1.2E41.2都是合法的浮点数常量。浮点数常量的取值范围是Java语言中定义的常量Double.MIN_VALUEDouble.MAX_VALUE之间,即 [ 4.9 E − 324 , 1.8 E 308 ] [4.9E-324,1.8E308] [4.9E324,1.8E308]之间的浮点数。

4、字符串常量

  • 字符串常量是用单引号或双引号引起来的一连串字符。由于字符串常量需要用单引号或双引号引起来,所以字符串本身包含的单引号或双引号需要用反斜杠(\)进行转义,即用“\'”表示字面意义上的单引号,用“\"”表示字面意义上的双引号。如果字符串本身包含反斜杠(\),也要进行转义,即用“\\”表示字面意义上的一个反斜杠。
  • 需要注意的是,只有字符串常量用单引号引起来时,字符串本身包含的单引号才需要进行转义,而双引号不必进行转义,例如,'ab\'4c"d5\\e'表示的字符串是ab'4c"d5\e;只有字符串常量用双引号引起来时,字符串本身包含的双引号才需要进行转义,而单引号不必转义,例如"ab'4c\"d5\\e"表示的字符串是ab'4c"d5\e

5、Null常量

  • Null常量用于表示变量引用的对象为空,它只有一个值,用null表示。

(六)EL访问数据

  • 目标:掌握EL中的点运算符(.)和方括号运算符([ ])的使用

1、EL的点运算符

  • EL中的点运算符,用于访问JSP页面中某些对象的属性,如JavaBean对象中的属性、List集合中的属性、Array数组中的属性等。
  • 用法示例:${student.name}
  • 在上述语法格式中,表达式${student.name}中点运算符的作用就是访问student对象中的name属性。

2、方括号运算符

  • EL中的中括号运算符与点运算符的功能相同,都用于访问JSP页面中某些对象的属性,当获取的属性名中包含一些特殊符号,如“-”或“?”等非字母或数字的符号,就只能使用中括号运算符访问该属性。
  • 方括号运算符示例:${user["user-name"]}

3、EL运算法的应用

(1)点运算符和方括号运算符在某种情况下可以互换,如${student.name}等价于${student["name"]}
(2)中括号运算符还可以访问List集合或数组中指定索引的某个元素,如表达式${users[0]}用于访问集合或数组中第一个元素。
(3)中括号运算符和点运算符可以相互结合使用,例如,表达式${users[0].age} 可以访问集合或数组中的第一个元素的age属性。

(七)EL中的运算符

  • 目标:掌握EL中的运算符的使用

1、算术运算符

算术运算符说明算术表达式结果
+${10 + 2}12
-${10 - 2}8
*${10 * 2}20
/(或div)${10 / 4}${10 div 2}2.5
%(或mod)取模(取余)${10 % 4}${10 mod 2}2
  • EL中的算术运算符用于对整数和浮点数的值进行算术运算。
  • -”运算符即可以作为减号,也可以作为负号。
  • /”或“div”运算符在进行除法运算时,商为小数。
  • EL的“+”运算符与Java的“+”运算符不同,它不能实现两个字符串之间的连接,如果使用该运算符连接两个不可以转换为数值型的字符串,将抛出异常;如果使用该运算符连接两个可以转换为数值型的字符串,EL会自动将这两个字符串转换为数值型,再进行加法运算。

2、比较运算符

  • EL中的比较运算符用于比较两个操作数的大小,操作数可以是各种常量、EL变量或EL表达式,所有的比较运算符执行的结果都是布尔类型。
比较运算符说明关系表达式结果
==(或eq)等于${10 == 2}${10 eq 2}false
!=(或ne)不等于${10 != 2}${10 ne 2}true
<(或lt)小于${10 < 2}${10 lt 2}false
>(或gt)大于${10 > 2}${10 gt 2}true
<=(或le)小于等于${10 <= 2}${10 le 2}false
>=(或ge)大于等于${10 >= 2}${10 ge 2}true
  • 比较运算符中的“==”是两个等号,千万不可只写一个等号。
  • 为了避免与JSP页面的标签产生冲突,对于后4种比较运算符,EL中通常使用上表中括号内的表示方式,例如,使用“lt”代替“<”运算符,如果运算符后面是数字,在运算符和数字之间至少要有一个空格,例如${1lt 2},但后面如果有其他符号时则可以不加空格,例如${1lt(1+1)}

3、逻辑运算符

  • EL中的逻辑运算符用于对结果为布尔类型的表达式进行运算,运算的结果仍为布尔类型。
逻辑运算符说明逻辑表达式结果
&&(and)逻辑与${true && false}${true and false}false
||(or)逻辑或${false || true}${false or true}true
  • 需要注意的是,在使用&&运算符时,如果有一个表达式结果为false,则整个表达式结果必为false;在使用||运算符时,如果有一个表达式的结果为true,则整个表达式结果必为true。

4、empty运算符

  • 在EL中,判断对象是否为空,可以通过empty运算符实现,该运算符是一个前缀(prefix)运算符, 即empty运算符位于操作数前方,用来确定一个对象或变量是否为null或空。
  • 语法格式:${empty expression}
  • 在上述语法格式中,expression用于指定要判断的变量或对象。
  • 定义两个request范围内的变量user1和user2,分别设置它们的值为null和""
<% request.setAttribute("user1", ""); %>
<% request.setAttribute("user2", null); %>
  • 通过empty运算符判断user1和user2是否为空
${empty user1}		// 返回值为true
${empty user2}		// 返回值为true
  • 由上述代码可知一个变量或对象为null 或空,代表的意义是不同的。null 表示这个变量没有指明任何对象,而空表示这个变量所属的对象内容为空,例如,空字符串、空的数组或者空的List容器。

5、条件运算符

  • EL中条件运算符(?:)用于执行某种条件判断,它类似于Java语言中的if-else语句。
  • 语法格式:${A ? B : C}
  • 在上述语法格式中,表达式A的计算结果为布尔类型,如果表达式A的计算结果为true,就执行表达式B,并返回B的值作为整个表达式的结果;如果表达式A的计算结果为false,就执行表达式C,并返回C的值作为整个表达式的结果。例如,表达式${(1 == 2) ? 3 : 4}的结果就是4

6、小括号运算符

  • EL中的小括号用于改变其他运算符的优先级,例如,表达式${a * b + c},正常情况下会先计算a * b的积,然后再将计算的结果与c相加,如果在这个表达式中加一个小括号运算符,将表达式修改为${a * (b + c)},则会先计算bc的和,再将计算的结果与a相乘。

7、运算优先级

  • EL中的运算符都有不同的运算优先级,当EL中包含多种运算符时,它们必须按照各自优先级的大小进行运算。
优先级运算符
1[ ] .
2( )
3-(unary)、not、!、empty
4*、/、div、%、mod
5+、-(binary)
6<、>、<=、>=、lt、gt、le、ge
7==、!=、eq、ne
8&&、and
9||、or
10? :
  • 注意:在应用EL取值时,没有数组的下标越界,没有空指针异常,没有字符串的拼接。

二、EL隐式对象

三、JSTL

四、JSTL中的Core标签库

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

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

相关文章

从语言模型到ChatGPT,大模型训练全攻略

文&#xff5c;python 前言 你是否想过&#xff0c;为什么ChatGPT能够如此火爆呢&#xff1f;我认为这主要是因为ChatGPT提供了好玩、有用的对话式交互功能&#xff0c;能够为用户提供帮助&#xff0c;而不仅仅是依靠“大”模型的魅力。毕竟&#xff0c;GPT-3在2020年就已经推出…

RedHat yum没有已启用源的解决方法

一般安装的红帽系统&#xff0c;自带的yum在没有付费的情况下是无使用的&#xff0c;所以我们要进行换源。 1、环境准备 先检查以下我们的linux系统环境&#xff0c;看看是不是Redhat7的版本 &#xff0c;出现如下图所示的界面 cat /etc/redhat-release 检查系统中是否安…

科技云报道:重塑增长新动能,“数智融合”捷径该如何走?

科技云报道原创。 如果说&#xff0c;过去是数字化转型的试验阶段&#xff0c;实施的是开荒动土、选种育苗&#xff0c;那么当前要进行的是精耕细作、植树造林。 数字化转型已进入了由个别行业、个别场景的“点状应用”向各行各业全流程、全环节“整体渗透”的关键期。 云计算…

yolov5-7.0 训练自己的数据集之检测数据集

YOLOv5是一种单阶段目标检测算法&#xff0c;有很高的精度和速度&#xff0c;因为项目需求&#xff0c;需要利用yolov5-7.0训练自己的目标检测数据集。 假设&#xff0c;环境已经配置完成&#xff01; 1&#xff09;准备数据集 在D:\Graduation_Project_Coding\network_class…

QGIS中导入dwg文件并使用GetWKT插件获取绘制元素WKT字符串以及QuickWKT插件实现WKT显示在图层

场景 QGIS在Windows上下载安装与建立空间数据库连接&#xff1a; https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124108040 在上面实现QGIS的安装之后&#xff0c;版本是3.26.3。 业务需求: 1、在dwg文件上绘制多边形区域&#xff0c;并获取绘制区域的wkt字…

如何在美国虚拟主机上安装WordPress?

如果你想在美国虚拟主机上搭建一个博客网站&#xff0c;那么WordPress是一个非常好的选择。本文将介绍如何在美国虚拟主机上安装WordPress&#xff0c;帮助你快速建立一个美观、高效的博客网站。 一、选择合适的虚拟主机服务商 在安装WordPress之前&#xff0c;你需要选择一个可…

[Netty] Netty自带的心跳机制 (十五)

文章目录 1.IdleStateHandler介绍2.IdleStateHandler源码解析3.IdleStateHandler总结 1.IdleStateHandler介绍 Netty服务端心跳机制: IdleStateHandler, 这个类可以对三种类型的心跳检测。 ChannelHandler.Sharable public class IdleHandler extends ChannelInboundHandlerA…

redis7详解

Redis基础 文章目录 一、Redis入门概述是什么&#xff1f;能干嘛&#xff1f;主流功能与应用优势 Redis7新特性 二、Redis安装配置Redis7安装步骤Redis7卸载步骤 三、Redis10大数据类型Redis 键(key)1、Redis 字符串&#xff08;String&#xff09;2、Reids列表&#xff08;Lis…

java版本电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…

谷歌云 | 内部 HTTP(S) 负载均衡器现在可以在全球范围内访问

【本文由Cloud Ace整理发布&#xff0c;Cloud Ace 是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。 作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷…

店铺销售管理系统有哪些用?该如何选?

现在市场竞争越来越激烈&#xff0c;实体店想要吸引更多意向客户&#xff0c;快速提高销量&#xff0c;使用店铺管理系统来智能化管理店铺&#xff0c;已经成为不可或缺的手段。 店铺管理系统能够帮助实体店老板实现店铺销售和库存管理的自动化和集中化&#xff0c;提高门店的销…

Ceph入门到精通-podman 入门实战

目录 podman安装podman制作本地镜像podman(docker)命令回顾podman快速入门 一入编程深似海&#xff0c;从此节操是路人。 最近使用podman&#xff0c;就想着写一篇总结性的笔记&#xff0c;以备后续参考。就如同写代码&#xff0c;不写注释&#xff0c;过了一段时间可能会想这…

【Leetcode】572.另一棵树的子树

另一棵树的子树 题目思路代码 题目 思路 这道题目主要用到判断两个二叉树是否相同 对root为根节点的树进行递归遍历判断 是否存在一颗子树和以subRoot为根节点的树 代码 class Solution {public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root null){return…

HJL-93/A数字式交流三相电流继电器 导轨安装 约瑟JOSEF

品牌&#xff1a;JOSEF约瑟名称&#xff1a;数字式交流三相电流继电器型号&#xff1a;HJL系列功率消耗&#xff1a;≤5W触点容量&#xff1a;250V/5A额定电压&#xff1a;58、100、110、220V HJL系列 数字式交流三相电流继电器型号&#xff1a; HJL-93/AY数字式交流三相电流继…

收藏~六大网站访客类型及应对方式

收藏&#xff01;六大网站访客类型及应对方式&#xff01; 当涉及到与潜在客户接触时&#xff0c;速度是关键。毕竟&#xff0c;当一个潜在客户来到你的网站时&#xff0c;你只有10秒钟的时间来捕捉他们的兴趣。我们把这种主动的方法称为 "扑捉"。它确保你的销售团队…

《百年孤独》

《创世记》之后&#xff0c;首部值得全人类阅读的文学巨著。 — 纽约时报 加西亚 马尔克斯以小说作品创建了一个自己的世界&#xff0c;一个浓缩的宇宙&#xff0c;其中喧嚣纷乱却又生动可信的现实&#xff0c;映射了一篇大陆及其人民的富足与贫困。 — 诺贝尔文学奖颁奖辞 马…

元宇宙数字人直播

数字人直播发展趋势主要有以下几个方面&#xff1a; AI技术&#xff1a;随着人工智能技术的不断发展&#xff0c;数字人直播将更加贴近真实&#xff0c;虚拟人物的表现力和情感交流能力将会得到大幅提升。 元宇宙&#xff1a;元宇宙是一种虚拟现实的空间&#xff0c;数…

如何把视频里的声音提取出来,4种有效方法学起来

在我们日常生活中&#xff0c;可能会有需要从视频文件中提取音频的情况&#xff0c;比如想要将视频中的歌曲或语音内容提取出来&#xff0c;或者电脑上看视频时&#xff0c;总有一些很有意思的BGM&#xff0c;想录下来或者提取出来单独使用&#xff0c;不过有些小伙伴可能不知道…

分布式事务Seata-TCC事务模式

承接上文Seata强一致性事务模式XA的设计理念 通用TCC模式 TCC是二阶段提交协议&#xff0c;Try-Confirm-Cancel&#xff08;资源预留、确认操作、取消操作&#xff09;&#xff0c;Try是对当前业务资源的检查&#xff0c;如果成功&#xff0c;则Confirm提交&#xff0c;否则C…

8 DWA(一)

8 DWA DMA简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取&#xff08;可以直接访问32内部存储器&#xff0c;包括内存SRAM&#xff0c;Flash&#xff09; DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#x…