当前位置: 首页 > news >正文

【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 指令(常用的)

在这里插入图片描述

  1. language 表示 jsp 翻译后是什么语言文件, 只支持 java
  2. contentType 表示 jsp 返回的数据类型,对应源码中 response.setContentType()参数值
  3. pageEncoding 属性 表示当前 jsp 页面文件本身的字符集
  4. 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.表达式脚本基本语法

  1. 表达式脚本的格式是:<%=表达式%>
  2. 表达式脚本的作用是:在 jsp 页面上输出数据
  3. 表达式脚本中的表达式不能以分号结束。

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.代码脚本
  1. 代码脚本的语法是:<% java 代码%>
  2. 代码脚本的作用是:可以在 jsp 页面中,编写我们需要的功能(使用 java )
  3. 可以由多个代码脚本块组合完成一个完整的 java 语句。
  4. 代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据

❄️5.JSP 内置对象

● 基本介绍 [讲解]
1、JSP 内置对象(已经创建好的对象, 直接使用 inbuild),是指 Tomcat 在翻译 jsp 页面成为Servlet 后,内部提供的九大对象,叫内置对象
2、内置对象,可以直接使用,不需要手动定义

● JSP 九大内置对象

  1. out 向客户端输出数据,out.println("");
  2. request 客户端的 http 请求
  3. response 响应对象
  4. session 会话对象
  5. application 对应 ServletContext
  6. pageContext jsp 页面的上下文,是一个域对象,可以 setAttribue(),作用范围只是本页面
  7. exception 异常对象 , getMessage()
  8. page 代表 jsp 这个实例本身
  9. 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 表达式介绍

  1. EL 表达式全称:Expression Language,是表达式语言

  2. EL 表达式主要是代替 jsp 页面的表达式脚本<%=request.getAttribute("xx")%>

  3. EL 表达式输出数据的时,比 jsp 的表达式脚本简洁

  4. 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>
  1. EL 表达式在输出 null 时,输出的是 “” 3. jsp 表达式脚本输出 null 的时,输出的是 “null” 字符串
  2. EL 表达式常用输出 Bean 的普通属性、 数组属性、List 集合属性和 map 集合属性

❄️2.EL 运算操作

  1. 基本语法语法:${ 运算表达式 }
    语法:${ 运算表达式 }
  2. 关系运算
    在这里插入图片描述
  3. 逻辑运算
    在这里插入图片描述
  4. 算数运算
    在这里插入图片描述

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 标签库介绍

  1. JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库
  2. EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面
    变得更佳简洁
  3. JSTL 由五个标签库组成
    在这里插入图片描述
  4. 使用 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 标签可以往域中保存数据

  1. 等价 域对象.setAttribute(key,value);
  2. scope 属性设置保存到哪个域
    page 表示 PageContext 域(默认值)
    request 表示 Request 域
    session 表示 Session 域
    application 表示 ServletContext 域
  3. var 属性设置 key 是什么
  4. value 属性设置值

2.<c:if />

<c:if test=“${ 10 > 2 }”>hello</c:if>

  1. if 标签用来做 if 判断。
  2. test 属性表示判断的条件(用 EL 表达式输出)

3.<c:choose> <c:when> <c:otherwise>标签

多路判断。跟 switch … case … default 非常接近

4.<c:forEach />标签

  1. 介绍: c:forEach 标签 用来遍历输出, 主要有 4 种形式
    ● 普通遍历输出 i 到 j
    ● 遍历数组
    ● 遍历 Map
    ● 遍历 List

items 表示遍历的集合
var 表示遍历到的数据
begin 表示遍历的开始索引值 ,从 0 开始计算
end 表示结束的索引值
step 属性表示遍历的步长值
varStatus 属性表示当前遍历到的数据的状态,可以得到 step,begin,end 等属性值

相关文章:

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

文章目录 &#x1f30d;一. JSP❄️1.JSP介绍❄️2.JSP 运行原理❄️3.page 指令(常用的)❄️ 4.JSP 三种常用脚本1.声明脚本2.表达式脚本3.代码脚本 ❄️5.JSP 内置对象❄️6.JSP 域对象 &#x1f30d;二. 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不提供二进制安装包&#xff0c;故需要maven编译。安装其它依赖&#xff1a; yum install gcc …...

微软AI研究团队推出LLaVA-Rad:轻量级开源基础模型,助力先进临床放射学报告生成

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

06排序 + 查找(D2_查找(D1_基础学习))

目录 温故而知新 -------------------------------- 讲解一&#xff1a;基础理论 一、什么是查找 二、为什么需要查找 -------------------------------- 讲解二&#xff1a;代码学习 一、顺序查找 1. 算法原理 2. 算法步骤 3. Java代码实现 4. 适用场景 5. 知识小…...

网站快速收录的秘诀:关键词布局与优化

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/107.html 网站快速收录的秘诀中&#xff0c;关键词布局与优化是至关重要的环节。以下是一些关于关键词布局与优化的建议&#xff0c;旨在帮助网站快速被搜索引擎收录并提高排名&#xff1a;…...

AI大语言模型

一、AIGC和生成式AI的概念 1-1、AIGC Al Generated Content&#xff1a;AI生成内容 1-2、生成式AI&#xff1a;generative ai AIGC是生成式 AI 技术在内容创作领域的具体应用成果。 目前有许多知名的生成式 AI&#xff1a; 文本生成领域 OpenAI GPT 系列百度文心一言阿里通…...

03-DevOps-安装并初始化Gitlab

Gitlab可以理解为是自己搭建的GitHub&#xff0c;也就是自己的代码仓库。 开启macvlan 在192.168.1.10服务器上&#xff0c;构建Macvlan网络&#xff0c;这种网络模式可以为每个容器独立分配ip。 docker network create -d macvlan \--subnet192.168.1.0/24 \--ip-range192.16…...

Mac重复文件,一键查找并清理的工具

​不知果粉们&#xff0c;你们有没有过这样的经历&#xff1a;在翻找重要文件时&#xff0c;突然发现一大堆“孪生兄弟”——Mac重复文件&#xff1f;别担心&#xff0c;你不是一个人&#xff01;今天&#xff0c;我们就来聊聊“Mac重复文件”&#xff0c;以及如何用几招轻松搞…...

Unity Mesh 切割算法详解

Mesh切割是游戏开发中实现物体断裂、破坏效果的核心技术。本教程将深入解析实时Mesh切割的数学原理&#xff0c;并提供完整的Unity实现方案。 一、切割原理分析 1.1 几何基础 切割平面方程&#xff1a;Ax By Cz D 0 顶点分类&#xff1a;每个顶点到平面的距离决定其位置…...

ASUS/华硕天选1 FA506I 原厂Win10 专业版系统 工厂文件 带ASUS Recovery恢复 教程

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;带一键恢复&#xff0c;以及机器所有的驱动和软件。 支持型号&#xff1a;FA506IV FA506II FA506IU FA506IH 系统版本&#xff1a;Windows 10 专业版 文件: ycoemxt.cn/1205.html 文件格式&#xff1a;工…...

【计算机中级职称 信息安全工程师 备考】密码学知识,经典题目

2022年信息安全工程师下午题 题目 密码学技术也可以用于实现隐私保护,利用加密技术阻止非法用户对隐私数据的未授权访问和滥用。若某员工的用户名为“admin”&#xff0c;计划用RSA 对用户名进行加密&#xff0c;假设选取的两个素数 p47&#xff0c;q71&#xff0c;公钥加密指…...

期权帮|初识股指期货:股指期货的交割结算价是怎么来的?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 初识股指期货&#xff1a;股指期货的交割结算价是怎么来的&#xff1f; 股指期货的交割结算价是通过特定时间段内现货指数的算术平均价来确定的。 这一价格作为现金交割的基准…...

伺服使能的含义解析

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是对伺服上使能&#…...

数据集成实例分享:金蝶云星空对接旺店通实现库存管理自动化

拆卸父项出库&#xff1a;金蝶云星空数据集成到旺店通企业奇门 在现代企业的运营过程中&#xff0c;数据的高效流动和准确处理至关重要。本文将分享一个实际案例&#xff0c;展示如何通过轻易云数据集成平台&#xff0c;将金蝶云星空的数据无缝对接到旺店通企业奇门&#xff0…...

Android 常用设计模式和实例

一、什么是设计模式&#xff1f; 设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问&#xff0c;设计模式于己于他人于系统都是多赢的&#xff0c;设计模式使代码编制真正工程化&#xff0c;设计模式是软件工程的基石&#xff0c;如同大厦的一块块…...

模拟(典型算法思想)—— 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 …...

项目质量管理体系及保证措施

项目质量管理体系的核心是建立标准化流程、强化全员参与意识、实施动态监控机制。其中&#xff0c;标准化流程是质量管理的基石。例如&#xff0c;某全球500强企业通过引入ISO 9001体系&#xff0c;将项目缺陷率降低了37%。标准化流程不仅能明确各环节的质量要求&#xff0c;还…...

php 实现 deepSeek聊天对话

deepSeek 在 2025年可以说是火热。它可以说是国内版真正义意上的chatgpt。那么&#xff0c;如果我要实现用php 接入 deepSeek 的api呢。其实&#xff0c;方法也很简单。下面的代码我是自己封装过的&#xff0c;大家可以直接拿来使用&#xff0c;记得自己修改下密钥。 function…...

【Unity】性能优化:UI的合批 图集和优化

目录 前言一、合批测试二、图集 前言 注意&#xff1a;DC指的是Draw Call。 温馨小提示&#xff1a;Frame Debugger 窗口&#xff08;菜单&#xff1a;Window > Analysis > Frame Debugger&#xff09;会显示绘制调用信息&#xff0c;并允许您控制正在构建的帧的“回放”…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上

一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema&#xff0c;不需要复杂的查询&#xff0c;只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 &#xff1a;在几秒钟…...

人工智能--大型语言模型的存储

好的&#xff0c;我现在需要回答用户关于GGUF文件和safetensors文件后缀的差别的问题。首先&#xff0c;我得先确认这两个文件格式的具体应用场景和它们各自的优缺点。用户可能是在处理大模型时遇到了这两种文件格式&#xff0c;想了解它们的区别以便正确使用。 首先&#xff…...

AI赋能的浏览器自动化:Playwright MCP安装配置与实操案例

以下是对Playwright MCP的简单介绍&#xff1a; Playwright MCP 是一个基于 Playwright 的 MCP 工具&#xff0c;提供浏览器自动化功能不要求视觉模型支持&#xff0c;普通的文本大语言模型就可以通过结构化数据与网页交互支持多种浏览器操作&#xff0c;包括截图、点击、拖动…...