【JavaWeb10】服务器渲染技术 --- JSP

文章目录
- 🌍一. JSP
- ❄️1.JSP介绍
- ❄️2.JSP 运行原理
- ❄️3.page 指令(常用的)
- ❄️ 4.JSP 三种常用脚本
- 1.声明脚本
- 2.表达式脚本
- 3.代码脚本
- ❄️5.JSP 内置对象
- ❄️6.JSP 域对象
- 🌍二. EL
- ❄️1.EL 表达式介绍
- ❄️2.EL 运算操作
- ❄️3.EL 的 11 个隐含对象
- 🌍三. JSTL
- ❄️1.JSTL 标签库介绍
- ❄️2. core 核心库
🙋♂️ 作者:@whisperrr.🙋♂️
👀 专栏:JavaWeb👀
💥 标题:【JavaWeb10】服务器渲染技术 — JSP💥
❣️ 寄语:比较是偷走幸福的小偷❣️
🌍一. JSP
❄️1.JSP介绍
1.为什么需要 JSP
程序员在开发过程中,发现 servlet 做界面非常不方便
引出 JSP 技术,JSP 公式
jsp=html+java 片段+标签+javascript+css
2.JSP 全称是 Java Server Pages,Java 的服务器页面
3.JSP 这门技术的最大的特点在于,写 JSP 就像在写 HTML
● 相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码,为用户提供动态数据
● 相比 Servlet 而言,Servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产 生动态数据的同时,也很容易对数据进行排版。
4.jsp 技术基于 Servlet, 你可以理解成 JSP 就是对 Servlet 的包装.
5.会使用 JSP 的程序员, 再使用 thymeleaf 是非常容易的事情, 几乎是无缝接轨.
6.创建 hspedu_jsp WEB 项目,并引入 jar

7. jsp 页面不能像 HTML 页面, 直接用浏览器运行。只能通过浏览器访问 Tomcat 来访问jsp 页面
❄️2.JSP 运行原理
1.jsp 页面本质是一个 Servlet 程序, 其性能是和 java 关联的, 只是长得丑.
2. 第 1 次访问 jsp 页面的时候。Tomcat 服务器会把 jsp 页面解析成为一个 java 源文件。并 且 对 它 进 行 编 译 成 为 .class 字 节 码 程 序 。

分析下 cal_jsp.java 的源码,可以看出本质就是 Servlet, 要看到源码和分析类图,需要加入 jasper.jar 这个包[在 tomcat/lib 下拷贝]


❄️3.page 指令(常用的)

- language 表示 jsp 翻译后是什么语言文件, 只支持 java
- contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值
- pageEncoding 属性 表示当前 jsp 页面文件本身的字符集
- import 属性 跟 java 源代码中一样。用于导包,导类
❄️ 4.JSP 三种常用脚本
1.声明脚本
1.声明脚本的格式是: <%! 声明 java 代码 %>
作用:定义 jsp 的需要属性、方法、静态代码块和内部类等
2.代码演示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp 声明脚本应用实例</title>
</head>
<body>
<h1>jsp 声明脚本应用实例</h1>
<%!
//声明属性 -> 这个属性就是该 jsp 文件生成的 servlet statement_jsp 类的
private Integer id;
private String name = "老韩同学";
private String job;
private static String company;
private Double sal;
//静态代码块
static {
company = "字节跳动";
}
//声明方法
public String getName() {
return name;
}
%>
<hr/>
</body>
</html>
2.表达式脚本
1.表达式脚本基本语法
- 表达式脚本的格式是:<%=表达式%>
- 表达式脚本的作用是:在 jsp 页面上输出数据
- 表达式脚本中的表达式不能以分号结束。
2.代码演示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp 表达式脚本</title>
</head>
<body>
<h1>jsp 表达式脚本应用实例</h1>
<%!
String name = "字节跳动";
%>
<hr/>
<h1>个人信息</h1>
用户名= <%=name%><br/>
工作是: <%="java 工程师"%><br/>
得到参数= <%=request.getParameter("sex")%>//null
</body>
</html>
3.代码脚本
- 代码脚本的语法是:
<% java 代码%> - 代码脚本的作用是:可以在 jsp 页面中,编写我们需要的功能(使用 java )
- 可以由多个代码脚本块组合完成一个完整的 java 语句。
- 代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据
❄️5.JSP 内置对象
● 基本介绍 [讲解]
1、JSP 内置对象(已经创建好的对象, 直接使用 inbuild),是指 Tomcat 在翻译 jsp 页面成为Servlet 后,内部提供的九大对象,叫内置对象
2、内置对象,可以直接使用,不需要手动定义
● JSP 九大内置对象
- out 向客户端输出数据,
out.println(""); request客户端的 http 请求response响应对象session会话对象application对应ServletContextpageContext jsp页面的上下文,是一个域对象,可以setAttribue(),作用范围只是本页面exception异常对象 ,getMessage()page代表 jsp 这个实例本身config对应ServletConfig
● 对照 Servlet 来理解就比较轻松了. (学技术的思路: 只要去学某个类,建议熟练该类的继承关系)
一张图, 展示了 JSP 的父类 HttpJspBase 继承关系, 说明 JSP 内置对象的来源是 Servlet 和HttpJspPage
❄️6.JSP 域对象
JSP 四大域对象介绍[作用:存取数据]
1.pageContext (域对象,存放的数据只能在当前页面使用),【示意图】学习技术小技巧:/自己尝试去根据理解画出示意图

2. request (域对象,存放的数据在一次 request 请求有效), 【示意图】

3. session(域对象,存放的数据在一次会话有效), 【示意图】

4. application(域对象,存放的数据在整个 web 应用运行期间有效, 范围更大), 【示意图】


JSP 请求转发标签
<jsp:forward page="/bb.jsp"></jsp:forwar
🌍二. EL
❄️1.EL 表达式介绍
-
EL 表达式全称:Expression Language,是表达式语言
-
EL 表达式主要是代替 jsp 页面的表达式脚本
<%=request.getAttribute("xx")%> -
EL 表达式输出数据的时,比 jsp 的表达式脚本简洁
-
EL 表达式基本语法:
${key1}, 你可以理解就是一个语法糖
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el 表达式快速入门</title>
</head>
<body>
<% request.setAttribute("key", "key 值"); %>
jsp 表 达 式 脚 本 : <%=request.getAttribute("key") == null ? "" :
request.getAttribute("key")%><br/>
EL 表达式:${key}
</body>
</html>
- EL 表达式在输出 null 时,输出的是 “” 3. jsp 表达式脚本输出 null 的时,输出的是 “null” 字符串
- EL 表达式常用输出 Bean 的普通属性、 数组属性、List 集合属性和 map 集合属性
❄️2.EL 运算操作
- 基本语法语法:
${ 运算表达式 }
语法:${ 运算表达式 } - 关系运算

- 逻辑运算

- 算数运算

EL 的 empty 运算
empty 运算可以判断一个数据是否为空,如果为空,返回 true,否则返回 false
以下几种情况为空
● 值为 null
● 值为空串的时
● 值是 Object 类型数组,长度为零
● list 集合,元素个数为零
● map 集合,元素个数为零
❄️3.EL 的 11 个隐含对象

EL 四个特定域变量

pageContext 对象介绍
协议: ${ pageContext.request.scheme }
服务器 ip:${ pageContext.request.serverName }
服务器端口:${ pageContext.request.serverPort }
工程路径:${ pageContext.request.contextPath }
请求方法:${ pageContext.request.method }
客户端 ip 地址:${ pageContext.request.remoteHost }
会话 id :${ pageContext.session.id }
🌍三. JSTL
❄️1.JSTL 标签库介绍
- JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库
- EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面
变得更佳简洁 - JSTL 由五个标签库组成

- 使用 JSTL,需要导入相关的 jar 包

代码演示
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
韩顺平 Java 工程师
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSTL 快速入门</title>
</head>
<body>
<h1>JSTL 快速入门</h1>
<c:if test="${ 10 > 2 }">
<h1>10 > 2 为真</h1>
</c:if>
</body>
</html>
● taglib 引入标签,要放在行首
● 导入 jstl jar 包后,要重新发布 web 工程,否则不识别 jstl
❄️2. core 核心库
1.<c:set />
<c:set /> set标签可以往域中保存数据
- 等价 域对象.setAttribute(key,value);
- scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域- var 属性设置 key 是什么
- value 属性设置值
2.<c:if />
<c:if test=“${ 10 > 2 }”>hello</c:if>
- if 标签用来做 if 判断。
- test 属性表示判断的条件(用 EL 表达式输出)
3.<c:choose> <c:when> <c:otherwise>标签
多路判断。跟 switch … case … default 非常接近
4.<c:forEach />标签
- 介绍: c:forEach 标签 用来遍历输出, 主要有 4 种形式
● 普通遍历输出 i 到 j
● 遍历数组
● 遍历 Map
● 遍历 List
items 表示遍历的集合
var 表示遍历到的数据
begin 表示遍历的开始索引值 ,从 0 开始计算
end 表示结束的索引值
step 属性表示遍历的步长值
varStatus 属性表示当前遍历到的数据的状态,可以得到 step,begin,end 等属性值
相关文章:
【JavaWeb10】服务器渲染技术 --- JSP
文章目录 🌍一. JSP❄️1.JSP介绍❄️2.JSP 运行原理❄️3.page 指令(常用的)❄️ 4.JSP 三种常用脚本1.声明脚本2.表达式脚本3.代码脚本 ❄️5.JSP 内置对象❄️6.JSP 域对象 🌍二. EL❄️1.EL 表达式介绍❄️2.EL 运算操作❄️3.EL 的 11 个隐含对象 &…...
【Hadoop】大数据权限管理工具Ranger2.1.0编译
目录 编辑一、下载 ranger源码并编译 二、报错信息 报错1 报错2 报错3 报错4 一、下载 ranger源码并编译 ranger官网 https://ranger.apache.org/download.html 由于Ranger不提供二进制安装包,故需要maven编译。安装其它依赖: yum install gcc …...
微软AI研究团队推出LLaVA-Rad:轻量级开源基础模型,助力先进临床放射学报告生成
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
06排序 + 查找(D2_查找(D1_基础学习))
目录 温故而知新 -------------------------------- 讲解一:基础理论 一、什么是查找 二、为什么需要查找 -------------------------------- 讲解二:代码学习 一、顺序查找 1. 算法原理 2. 算法步骤 3. Java代码实现 4. 适用场景 5. 知识小…...
网站快速收录的秘诀:关键词布局与优化
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/107.html 网站快速收录的秘诀中,关键词布局与优化是至关重要的环节。以下是一些关于关键词布局与优化的建议,旨在帮助网站快速被搜索引擎收录并提高排名:…...
AI大语言模型
一、AIGC和生成式AI的概念 1-1、AIGC Al Generated Content:AI生成内容 1-2、生成式AI:generative ai AIGC是生成式 AI 技术在内容创作领域的具体应用成果。 目前有许多知名的生成式 AI: 文本生成领域 OpenAI GPT 系列百度文心一言阿里通…...
03-DevOps-安装并初始化Gitlab
Gitlab可以理解为是自己搭建的GitHub,也就是自己的代码仓库。 开启macvlan 在192.168.1.10服务器上,构建Macvlan网络,这种网络模式可以为每个容器独立分配ip。 docker network create -d macvlan \--subnet192.168.1.0/24 \--ip-range192.16…...
Mac重复文件,一键查找并清理的工具
不知果粉们,你们有没有过这样的经历:在翻找重要文件时,突然发现一大堆“孪生兄弟”——Mac重复文件?别担心,你不是一个人!今天,我们就来聊聊“Mac重复文件”,以及如何用几招轻松搞…...
Unity Mesh 切割算法详解
Mesh切割是游戏开发中实现物体断裂、破坏效果的核心技术。本教程将深入解析实时Mesh切割的数学原理,并提供完整的Unity实现方案。 一、切割原理分析 1.1 几何基础 切割平面方程:Ax By Cz D 0 顶点分类:每个顶点到平面的距离决定其位置…...
ASUS/华硕天选1 FA506I 原厂Win10 专业版系统 工厂文件 带ASUS Recovery恢复 教程
华硕工厂文件恢复系统 ,安装结束后带隐藏分区,带一键恢复,以及机器所有的驱动和软件。 支持型号:FA506IV FA506II FA506IU FA506IH 系统版本:Windows 10 专业版 文件: ycoemxt.cn/1205.html 文件格式:工…...
【计算机中级职称 信息安全工程师 备考】密码学知识,经典题目
2022年信息安全工程师下午题 题目 密码学技术也可以用于实现隐私保护,利用加密技术阻止非法用户对隐私数据的未授权访问和滥用。若某员工的用户名为“admin”,计划用RSA 对用户名进行加密,假设选取的两个素数 p47,q71,公钥加密指…...
期权帮|初识股指期货:股指期货的交割结算价是怎么来的?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 初识股指期货:股指期货的交割结算价是怎么来的? 股指期货的交割结算价是通过特定时间段内现货指数的算术平均价来确定的。 这一价格作为现金交割的基准…...
伺服使能的含义解析
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是对伺服上使能&#…...
数据集成实例分享:金蝶云星空对接旺店通实现库存管理自动化
拆卸父项出库:金蝶云星空数据集成到旺店通企业奇门 在现代企业的运营过程中,数据的高效流动和准确处理至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将金蝶云星空的数据无缝对接到旺店通企业奇门࿰…...
Android 常用设计模式和实例
一、什么是设计模式? 设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块…...
模拟(典型算法思想)—— OJ例题算法解析思路
目录 一、1576. 替换所有的问号 - 力扣(LeetCode) 运行代码: 1. 输入和输出 2. 变量初始化 3. 遍历字符串 4. 替换逻辑 5. 返回结果 整体分析 1. 思路总结 2. 为什么要这样设计 3. 时间复杂度与空间复杂度 4. 边界情况 二、495. 提莫攻击 - 力扣(LeetCode) …...
Nginx配置 ngx_http_proxy_connect_module 模块及安装
1、配置完互联网yum源后,安装相关依赖软件包 [root@server soft]# yum install -y patch pcre pcre-devel make gcc gcc-c++ openssl openssh [root@server soft]# yum install openssl* 2、解压缩软件,加载模块 [root@server soft]# ls nginx-1.20.2 nginx-1.20.2.tar.gz …...
项目质量管理体系及保证措施
项目质量管理体系的核心是建立标准化流程、强化全员参与意识、实施动态监控机制。其中,标准化流程是质量管理的基石。例如,某全球500强企业通过引入ISO 9001体系,将项目缺陷率降低了37%。标准化流程不仅能明确各环节的质量要求,还…...
php 实现 deepSeek聊天对话
deepSeek 在 2025年可以说是火热。它可以说是国内版真正义意上的chatgpt。那么,如果我要实现用php 接入 deepSeek 的api呢。其实,方法也很简单。下面的代码我是自己封装过的,大家可以直接拿来使用,记得自己修改下密钥。 function…...
【Unity】性能优化:UI的合批 图集和优化
目录 前言一、合批测试二、图集 前言 注意:DC指的是Draw Call。 温馨小提示:Frame Debugger 窗口(菜单:Window > Analysis > Frame Debugger)会显示绘制调用信息,并允许您控制正在构建的帧的“回放”…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...


