【JavaWeb从零到一】JSPELJSTL

news2025/8/12 17:18:40

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。
🍎个人主页:Hhzzy99
🍊个人信条:坚持就是胜利!
💞当前专栏:【JavaWeb】
🥭本文内容:JSP的深入学习,EL表达式的学习,以及JSP的核心标签JSTL的学习

🚀【JavaWeb从零到一】系列文章目录

🚩【JavaWeb从零到一】前置知识
🚩【JavaWeb从零到一】Mysql基础总结
🚩【JavaWeb从零到一】JDBC详解
🚩【JavaWeb从零到一】JDBC连接池&JDBCTemplate
🚩【JavaWeb从零到一】会话技术Cookie&Session&JSP


JSP&EL&JSTL

  • 🚀【JavaWeb从零到一】系列文章目录
  • 前言
  • 一、JSP
    • 1.JSP中的指令
      • page指令
      • page指令有如下属性值:
      • Include指令
      • Include指令的语法格式如下:
      • Taglib指令
      • Taglib指令的语法:
    • 2.JSP中的注释
    • 3.JSP中的内置对象
  • 二、MVC开发模式
  • EL表达式
    • EL算术表达式
    • EL比较运算符
    • EL逻辑运算符
    • EL其它运算符
    • EL表达式获取值
  • JSTL
  • 三层架构
  • 结语


前言

在我的上一篇文章中我已经大致的将JSP做了讲解,此文章我们将更加深入了解JSP
上篇文章传送门🚪
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。


一、JSP

在上一篇文章中我们对JSP做了一个初步的了解,所以此文中我将不再重复之前发布的内容,如果有同学想了解的话可以点击我🚩

1.JSP中的指令

JSP指令是用来设置整个JSP页面相关的属性的,如网页的编码方式和脚本语言。

它语法格式如下:

<%@ directive attribute=“value” %>

指令可以有很多个属性,它们以 键值对 的形式存在,并用逗号隔开。

JSP中的三种指令标签:

指令描述
<%@ page … %>定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include … %>包含其他文件
<%@ taglib … %>引入标签库的定义

page指令

Page 指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

Page指令的语法格式:

<%@ page attribute=“value” %>

page指令有如下属性值:

属性描述
buffer指定out对象使用缓冲区的大小,默认8kb
autoFlush控制out对象的 缓存区
contentType指定当前JSP页面的MIME类型和字符编码,等同于response.setContentType()
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends指定servlet从哪一个类继承
import导入要使用的Java类
info定义JSP页面的描述信息
isThreadSafe指定对JSP页面的访问是否为线程安全
language定义JSP页面所用的脚本语言,默认是Java
session指定JSP页面是否使用session
isELIgnored指定是否执行EL表达式
isScriptingEnabled确定脚本元素能否被使用

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行

Include指令的语法格式如下:

<%@ include file=“文件相对 url 地址” %>

include指令中的文件名实际上是一个相对的 URL 地址

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。
top.jsp文件中加入<h2>这是include头</h2>,在body.jsp中测试
在这里插入图片描述
测试结果:
在这里插入图片描述

Taglib指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

<%@ taglib uri=“uri” prefix=“prefixOfTag” %>

2.JSP中的注释

HTML注释:
<!-- -->:只能注释HTML代码片段
带有JSP表达式的注释:
在HTML注释中可以嵌入JSP表达式,注释格式如下:
<!--comment<%=expression %>-->
包含该注释语句的 JSP 页面被请求后,服务器能够识别注释中的 JSP 表达式,从而来执行该表达式,而对注释中的其他内容不做任何操作。
当服务器将执行结果返回给客户端后,客户端浏览器会识别该注释语句,所以被注释的内容不会显示在浏览器中。
<%String name="XYQ";%>
<!--当前用户:<%=name%>-->
<table><tr><td>欢迎登录:<%=name%></td></tr></table>
访问该页面后,将会在客户端浏览器中输出以下内容:

欢迎登录:XYQ

通过查看HTML源代码,看到如下内容:

<!--当前用户:<%=name%>-->
<table><tr><td>欢迎登录:XYQ</td></tr></table>

隐藏注释:
<%--注释内容--%>

3.JSP中的内置对象

在JSP页面中不需要创建,直接使用的对象

对象真实类型说明
requestjavax.servlet.http.HttpServletRequest获取用户请求信息
responsejavax.servlet.http.HttpServletResponse响应客户端请求,并将处理信息返回到客户端
outjavax.servlet.jsp.JspWriter输出内容到 HTML 中
sessionjavax.servlet.http.HttpSession用来保存用户信息
applicationjavax.servlet.ServletContext所有用户共享信息
configjavax.servlet.ServletConfig这是一个 Servlet 配置对象,用于 Servlet 和页面的初始化参数
pageContextjavax.servlet.jsp.PageContextJSP 的页面容器,用于访问 page、request、application 和 session 等的属性
pagejavax.servlet.jsp.HttpJspPage类似于 Java 类的 this 关键字,表示当前 JSP 页面
exceptionjava.lang.Throwable该对象用于处理 JSP 文件执行时发生的错误和异常;只有在 JSP 页面的 page 指令中指定 isErrorPage 的取值 true 时,才可以在本页面使用 exception 对象。

二、MVC开发模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • M:Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。通俗来讲就是用来完成具体的业务操作,如:查询数据库,封装对象。
  • V:View(视图) - 视图代表模型包含的数据的可视化。展示数据。
  • C:Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。通俗来说就是获取用户的输入,调用模型,将数据交给视图进行展示。
    MVC
    实现
    实现
    优点
    耦合性低,方便维护,可以利用于工协作、重用性高、生命周期成本低、部署快、可维护性高
    缺点
    使得项目架构变得复杂,对开发人员要求高

EL表达式

前面的 JSP 页面中,我们经常使用 JSP 表达式来输出变量或者页面之间传递的参数,大大降低了页面的可读性。
为了简化 JSP 页面,JSP 2.0 新增了 EL(Expression Language)表达式语言。EL 提供了更为简洁、方便的形式来访问变量和参数,不仅可以简化 JSP 页面代码,还会使开发者的逻辑变得更加清晰 。
EL 表达式语法如下:
${EL表达式}
EL 表达式语法以${开头,以}结束,中间为合法的表达式
示例
${param.name} 表示获取参数 name 的值,它等同于

<%=request.getParameter(‘name’) %>

EL算术表达式

算术运算符用来进行加、减、乘、除和求余,EL 表达式算术运算符如下:

EL算术运算符说明范例结果
+${5+2}7
-${5-2}3
*${5*2}10
/ 或 div${5/2}2
% 或 mod求余${5%2}1

注意:EL 的+运算符与 Java 的+运算符不一样,它无法实现两个字符串的连接运算。如果该运算符连接的两个值不能转换为数值型的字符串,则会拋出异常;反之,EL 会自动将这两个字符转换为数值型数据,再进行运算。

EL比较运算符

比较运算符用来实现两个表达式的比较,进行比较的表达式可以是数值型或字符串。EL 表达式比较运算符如下:

EL比较运算符说明范例结果
== 或 eq等于${6==6} 或 ${6 eq 6} ${“A”=“a”} 或 ${“A” eq “a”}true false
!= 或 ne不等于${6!=6} 或 ${6 ne 6} ${“A"!=“a”} 或 ${“A” ne “a”}false true
< 或 lt小于${3<8} 或 ${3 lt 8} ${“A”<“a”} 或 ${“A” lt “a”}true true
> 或 gt大于${3>8} 或 ${3 gt 8} ${“A”>“a”} 或 ${“A” gt “a”}false false
<= 或 le小于等于${3<=8} 或 ${3 le 8} ${“A”<=“a”} 或 ${“A” le “a”}true true
>= 或 ge大于等于${3>=8} 或 ${3 ge 8} ${“A”>=“a”} 或 ${“A” ge “a”}false false

EL逻辑运算符

逻辑运算符两边的表达式必须是布尔型(Boolean)变量,其返回结果也是布尔型(Boolean)。EL 表达式逻辑运算符如下:

EL逻辑运算符说明范例结果
&& 或 and${2>1&&3<4 }${2>1and3<4 }true
|| 或 or${2<1||3>4}${2<1or3>4}false
! 或 not${!(2>4)}${not (2>4)}true

EL其它运算符

.[ ]
.[ ]是 EL 中最常用的运算符,用来访问 JavaBean 中的属性隐式对象的数据。一般情况下,.用来访问 JavaBean 属性或 Map 类型的值,[ ]用来访问数组或者列表的元素。
empty
empty 用来判断 EL 表达式中的对象或者变量是否为空。若为或者 null,返回 true,否则返回 false。
条件运算符
EL 表达式中,条件运算符的语法和 Java 的完全一致,如下:

${条件表达式?表达式1:表达式2}

其中,条件表达式用于指定一个判定条件,该表达式的结果为 boolean 类型。如果该表达式的运算结果为 true,则返回表达式 1 的值;反之,返回表达式 2 的值。

注意:
jsp默认支持EL表达式,如果要忽略EL表达式则:

  • 设置jsp中page指令中的:isELIgnored="true"忽略当前jsp页面中所有的EL表达式
  • \${表达式}:忽略当前这个EL表达式

EL表达式获取值

EL表达式只能从域对象中获取值
语法:

  • ${域名称.键名}:从指定域中获取指定键的值
  • pageScopepageContext
  • requestrequest
  • sessionScopesession
  • applicationScopeapplication(ServletContext)

举例:
在request域中存储name=张三,在session域中存储age=23
获取语法:

${requestScope.name}
${sessionScope.age}
${sessionScope.haha}//没有的值在页面中只会显示空字符串。

  • 还有一种${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
    在这里插入图片描述
    在这里插入图片描述
  • 获取对象、List集合、Map集合的值
    对象:
    创建一个user,里面有name,age,birthday
    获取对象:

${requestScope.user}

通过对象的属性获取值

${requestScope.user.name}
${user.age}
${user.birthday}

List集合:
${域名称.键名[索引]}
如果角标越界了,页面只会显示空字符
Map集合:

${域名称.键名.Key名称}
${域名称.键名[“Key名称”]}

JSTL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
使用任何库,你必须在每个 JSP 文件中的头部包含 <taglib>标签。
JSTL作用
用于简化和替换JSP页面上的java代码
1.导入jstl相关的jar包点我去下载🚩
2.引入标签库:taglib指令:

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

3.使用标签
常见的JSTL标签

标签描述
c:out用于在JSP中显示数据,就像<%= … >
c:set用于保存数据
c:remove用于删除数据
c:catch用来处理产生错误的异常状况,并且将错误信息储存起来
c:if与我们在一般程序中用的if一样
c:choose本身只当做<c:when>和<c:otherwise>的父标签
c:when<c:choose>的子标签,用来判断条件是否成立
c:otherwise<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
c:import检索一个绝对或相对 URL,然后将其内容暴露给页面
c:forEach基础迭代标签,接受多种集合类型
c:forTokens根据指定的分隔符来分隔内容并迭代输出
c:param用来给包含或重定向的页面传递参数
c:redirect重定向至一个新的URL.
c:url使用可选的查询参数来创造一个URL

三层架构

是一种软件设计架构:
Web(表现层): 主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
Service:(业务逻辑层) : Web层和Dao层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
Dao:(数据访问层): 与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于Web层的。用户的需求反映给界面(Web),Web反映给Service,Service反映给Dao,Dao进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
图示:
在这里插入图片描述
后期我们会学习的SpringMVC框架,它会简化Servlet的代码编写,MyBatis框架,简化我们对数据库的访问操作,Spring框架,简化我们业务逻辑层代码的编写


结语

以上就是今天要讲的内容,本文中讲解到了JavaWeb开发的JSP、EL、JSTL以及三层架构技术,为接下来JavaWeb更深入的学习做铺垫。
谢谢大家的支持喔💕!

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

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

相关文章

通过题目入门python基础1

通过题目入门python基础 简介&#xff1a;本文通过&#xff0c;python的基础题目&#xff0c;带领大家入门python的基础语法&#xff0c;以实用主义为主。 差 读取四个整数 A,B,C,D&#xff0c;并计算 (AB−CD) 的值。 输入格式 输入共四行&#xff0c;第一行包含整数 A&am…

GraphQL 实践与服务搭建

原文链接: GraphQL 实践与服务搭建 GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余&#xff0c;也让 API 更容…

《SystemVerilog Assertion 应用指南》学习01

文章目录0、基于断言的 验证1、SVA 介绍1.1.、什么是断言1.2、为什么使用 SystemVerilog 断言&#xff08;SVA&#xff09;1.3、SystemVerilog 的调度1.4、SVA 术语1.4.1、并发断言1.4.2、即时断言1.5、建立 SVA 块1.6、一个简单的序列1.7、边沿定义的序列1.8、逻辑关系的序列1…

云原生安全:4C~

4C是啥&#xff1f; cloudclustercontainercode 4个C是层的关系&#xff0c;外圈不安全&#xff0c;不能指望里面太安全。。。 目录 Cloud cloud Provider Security 基础架构安全 Cluster cluster的组件 cluster中的组件&#xff08;应用中的&#xff09; Container …

第二章:Pythonocc官方demo 案例44(几何板条)

源代码&#xff1a; ##Copyright 2009-2016 Jelle Feringa (jelleferingagmail.com) ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General Public License as pub…

数据库 Apache Doris 展开了为期两个月的调研测试

2022 年 3 月开始&#xff0c;我们对符合以上特点的数据库 Apache Doris 展开了为期两个月的调研测试。以下是 Apache Doris 1.1.2 在各个方面的满足情况。 基于上述情况&#xff0c;我们决定采用 Apache Doris&#xff0c;除了可以满足上文提到的几个特点&#xff0c;我们还考…

[信息系统项目管理师-2023备考]信息化与信息系统(一)

1.信息的质量特性 精确性&#xff1a;对事物状态描述的精准程度完整性&#xff1a;对事物状态描述的全面程度&#xff0c;完整信息应该包括所有重要事实可靠性&#xff1a;信息的来源、采集方法、传输过程是可以信任的&#xff0c;符合预期及时性&#xff1a;获取信息的时刻与…

(八)RabbitMQ发布确认

发布确认1、发布确认原理2、发布确认策略2.1、开启发布确认的方法2.2、单个确认发布2.3、批量确认发布2.4、异步确认发布2.5、处理异步未确认消息1、发布确认原理 书面文&#xff1a;生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在…

Python集合类型详解(一)——集合定义与集合操作符

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python集合类型定义与集合操作符。 一、集合类型定义 在Python中&#xff0c;集合是一种非常重要的组合数据类型。Python中的集合与数学中的集合非常相似&#xff0c;集合中的数据没有顺序&#xff0c;并且每个元…

第二章:Pythonocc官方demo 案例45(几何轴向曲线偏置)

源代码&#xff1a; #!/usr/bin/env python##Copyright 2009-2016 Jelle Feringa (jelleferingagmail.com) ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General …

【优化调度】遗传算法求解工件的并行调度组合优化问题【含Matlab源码 2234期】

⛄ 一、 遗传算法简介 1 问题描述 假定一个加工系统有m台机器和n件工件&#xff0c;每个工件包含一道或多道工序,工件的加工顺序是确定的,但每个工件可能有几条可行的加工路线,即每道工序可在多台不同的机床上加工,工序的加工时间和加工费用随机床的性能不同而变化。作业调度的…

并查集解析

文章目录&#x1f6a9;并查集的理解&#x1f6a9;并查集的结构与原理&#x1f6a9;并查集的实现&#x1f341;整体框架&#x1f341;路径压缩&#x1f6a9;总结&#x1f6a9;并查集的理解 并查集是基于数组操作的一个特殊数据结构&#xff0c;和以前学习[数组的堆排序]时有点相…

分析设备树文件

1.设备树是干嘛的 硬件资源有很多&#xff0c;想要实现分类管理&#xff0c;方便驱动去控制它&#xff0c;则需要设备树来管理硬件信息。 所以&#xff0c;设备树主要存放了一些设备节点信息&#xff0c;键值对&#xff0c;和属性&#xff1b;节点中也可以包含子节点。 2.设…

安全架构中的前端安全防护研究

国家互联网应急中心发布的被篡改网站数据让很多人触目惊心&#xff0c;近年来各种Web网站攻击事件频频发生&#xff0c;网站SQL注入&#xff0c;网页被篡改、信息失窃、甚至被利用成传播木马的载体Web安全形势日益严峻&#xff0c;越来越受到人们的关注。 Gartner 对安全架构的…

创建计划协议、维护创建计划、收货

创建计划协议事务码&#xff1a;ME31L创建计划协议 &#xff08;ME32L 修改计划协议 ME33L查询计划协议 ME2L查询采购订单&#xff09; 输入&#xff1a;供应商、协议类型、协议日期、采购组织、采购组、工厂、存储地点等信息后回车。 然后输入有效截至日期&#xff0c; 再点击…

计算机毕业设计java+springboot宠物商城系统

一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot Maven mybatis Vue 等等组成&#xff0c;B…

【JVM】垃圾回收:垃圾收集器

一、语境中的并行与并发 并行 并行描述的时多条垃圾收集器线程之间的关系&#xff0c;说明同一时间有多条这样的线程在协同工作&#xff0c;通常默认此时用户线程是处于等待状态。 并发 并发描述的是垃圾收集器线程与用户线程之间的关系&#xff0c;说明同一时间垃圾收集器线程…

简单实现一个虚拟形象系统

前言 上周启动居家开会的时候&#xff0c;看到有人通过「虚拟形象」功能&#xff0c;给自己带上了口罩、眼镜之类&#xff0c;于是想到了是不是也可以搞一个简单的虚拟形象系统。 大致想来&#xff0c;分为以下几个部分&#xff1a; 卷积神经网络(CNN) 下面讲解一下三层CN…

视频格式转换器哪个好用?万兴优转-好用的视频格式转换器

视频格式转换器是用于转换视频格式的软件&#xff0c;是指用于视频转换、音频转换、CD轨抓取、音视频混合转换、音视频剪切、连接转换、视频水印叠加、滚动字幕、个性化文字、图片叠加、视频相框叠加的音视频转换工具。 也就是说&#xff0c;视频有非常多的格式如AVI、VCD、SVC…

【JavaWeb从零到一】会话技术CookieSessionJSP

&#x1f680;【JavaWeb从零到一】系列文章目录 &#x1f6a9;【JavaWeb从零到一】前置知识 &#x1f6a9;【JavaWeb从零到一】Mysql基础总结 &#x1f6a9;【JavaWeb从零到一】JDBC详解 &#x1f6a9;【JavaWeb从零到一】JDBC连接池&JDBCTemplate Cookie&Session&…