JavaWeb之JSP

news2025/2/9 6:57:16

文章目录

    • JSP的基本介绍
    • JSP的本质
    • JSP的三种语法
      • JSP头部的page指令
        • language属性
        • contentType属性
        • image.png
        • pageEncoding属性
        • import属性
        • autoFlush属性 - 给out输出流使用
        • buffer属性 - 给out输出流使用
        • errorPage属性
        • isErrorPage属性
        • session属性
        • extends属性
      • JSP中的常用脚本
        • 声明脚本(极少使用)
        • 表达式脚本(常用)
        • 代码脚本
      • JSP中的三种注释
        • html注释
        • java注释
        • jsp注释
    • JSP九大内置对象
    • JSP四大域对象
    • JSP中的out输出和response.getWriter输出的区别
    • JSP的常用标签
      • JSP静态包含
      • JSP动态包含
      • JSP标签转发
    • Listener监听器
      • ServletContextListener监听器

JSP的基本介绍

:::tips
JSP的全称是Java Server Pages,Java的服务器页面
JSP的主要作用就是代替Servlet程序回传html页面的数据
因为Servlet程序回传html页面数据是一件非常繁琐的事情。开发成本和维护成本都极高
:::

  • Servlet回传html页面数据
package com.zan.servlet;

import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

public class PringHtml extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过响应的输出流回传html页面数据
        resp.setContentType("text/html; charset=UTF-8");

        PrintWriter writer = resp.getWriter();

        writer.write("<!DOCTYPE html>\r\n");
        writer.write(" <html lang=\"en\">\r\n");
        writer.write(" <head>\r\n");
        writer.write("  <meta charset=\"UTF-8\">\r\n");
        writer.write("  <title>Title</title>\r\n");
        writer.write(" </head>\r\n");
        writer.write("<body>\r\n");
        writer.write("  这是html页面数据>\r\n");
        writer.write(" </body>\r\n");
        writer.write("</html>\r\n");
    }
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Title</title>
  </head>
  <body>
    这是html页面数据
  </body>
</html>
  • JSP小结
  1. 创建JSP的页面

image.png
image.png

  1. JSP的访问
    :::tips
    jsp页面和html是一样的,都是存放在web目录下,访问也跟访问html页面一样
    比如:
    web目录
    a.html页面 ==> http://ip:port/工程路径/a.html
    b.jsp页面 ==> http://ip:port/工程路径/b.jsp
    :::

JSP的本质

  • JSP页面本质上是一个Servlet程序

当我们第一次访问jsp页面的时候哦。Tomcat服务器会帮我们把jsp页面翻译成为一个java源文件。并且对它进行编译成为.class字节码程序
image.png
当我们根据源代码发现,HttpJspBase类。它直接的继承了HttpServlet类,也就是说,jsp翻译出来的java类,间接的继承了HttpServlet类,即翻译出来的其实就是一个Servlet程序
image.png
总结:通过翻译的java源代码我们就可以得到结果:jsp就是Servlet程序

同样我们也可以去观察翻译出来的Servlet程序的源代码,不难发现,其底层实现,也是通过输出流,把html页面数据回传给客户端
image.png

JSP的三种语法

JSP头部的page指令

  • JSP的page指令可以修改JSP页面中一些重要的属性或者行为
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

image.png

language属性

  • 表示JSP翻译后是什么语言文件,暂时只支持java

image.png

contentType属性

  • 表示JSP返回的数据类型是什么,也是源码中response,setContentType()参数值,即网页的编译类型

image.png

pageEncoding属性

  • 表示当前JSP页面文件本身的字符集,即本身的编译类型

image.png

import属性

  • 跟Java源代码中一样,用于导包、导类

autoFlush属性 - 给out输出流使用

  • 设置当out输出流缓冲区满了之后,是否自动刷新缓冲区。默认是true

buffer属性 - 给out输出流使用

  • 设置缓冲区的大小,默认是8kb
    :::tips
    注意:以上两个属性一般是结合使用的。即如果说将缓冲区的大小改小,而且设置不会自动刷新缓冲区,那么就会报错
    :::
    image.png

  • 缓冲区溢出错误

image.png

errorPage属性

  • 设置当JSP页面运行时出错,自动跳转去的错误页面路径

image.png

isErrorPage属性

  • 设置当前JSP页面是否是错误信息页面。默认是false,如果是true可以获取异常信息

session属性

  • 设置访问当前JSP页面,是否会创建HttpSession对象,默认是true

extends属性

  • 设置JSP翻译出来的java类默认继承谁

JSP中的常用脚本

声明脚本(极少使用)

:::tips
格式:<%! 声明java代码 %>
作用:可以给JSP翻译出来的java类定义属性和方法甚至是静态代码块、内部类等
:::

 <%!
        //声明Java代码,可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块。内部类
        //1、声明类属性
        private Integer id;
        private String name;
        private static Map<String, Object> map;
    %>
    <%!
        //2、声明 static 静态代码块
        static {
            map = new HashMap<String, Object>();
            map.put("key1", "value1");
            map.put("key2", "value2");
            map.put("key3", "value3");
        }
    %>
    <%!
        //3、声明类方法
        public int abc() {
            return 12;
        }
    %>
    <%!
        //4、声明内部类
        public static class A {
            private Integer id = 12;
            private String abc = "abc";
        }
    %>

image.png

表达式脚本(常用)

:::tips
格式:<%=表达式%>
作用:在JSP页面上输出数据
:::
:::info
表达式脚本的特点:

  1. 所有的表达式脚本都会被翻译到_jspService()方法中
  2. 表达式脚本都会被翻译称为out.print()输出到页面上
  3. 由于表达式脚本翻译的内容都在_jspService()方法中,所以_jspService()方法中的对象都可以直接使用
  4. 表达式脚本中的表达式不能以分号结束

image.png
:::

1. 输出整型<br/>
<%=12 %><br/>
2. 输出浮点型<br/>
<%=12.12 %><br/>
3. 输出字符串<br/>
<%="我是字符串" %><br/>
4. 输出对象<br/>
<%=map%><br/>

<%=request.getParameter("username")%>

image.png

代码脚本

:::tips
格式:<% java语句 %>
代码脚本的作用:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)
:::
:::info
代码脚本的特点是:

  1. 代码脚本翻译之后都在_jspService方法中
  2. 代码脚本由于翻译到_jspService()方法中,所以在_jspService()方法中的现有对象(即内部对象)都可以直接使用
  3. 还可以由多个代码脚本块组合完成一个完整的java语句
  4. 代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据
    :::
<%--    1. 代码脚本----if 语句--%>
    <%
        int i = 13;
        if (i == 12) {
            System.out.println("我好帅");
        } else {
            System.out.println("我又骗人了");
        }
    %>
<%--    2. 代码脚本----for 循环语句--%>
    <%
        for (int j = 0; j < 10; j++) {
    %>
        <%=j%> <br/>
    <%
            System.out.println(j);
        }
    %>
<%--    3. 翻译后 java 文件中_jspService 方法内的代码都可以写--%>
    <%
        String username = request.getParameter("username");
        System.out.println("用户名的请求参数是" + username);
    %>

image.png

JSP中的三种注释

html注释

<!--这是html注释-->
  • html注释会被翻译到java源代码中,在_jspService方法中,以out.writer输出到客户端

java注释

<%
    // 单行java注释
    /*
       多行java注释
     */
%>
  • java注释会被翻译到java源代码中

jsp注释

<%--这是jsp注释--%>
  • jsp注释可以注掉jsp页面中的所有代码

JSP九大内置对象

  • JSP中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的九大对象,叫内置对象

image.png

request请求对象
response响应对象
pageContextjsp的上下文对象
session会话对象
applicationServletContext对象
configServletConfig对象
outjsp输出流对象
page指向当前jsp的对象
exception异常对象

JSP四大域对象

pageContext(PageContextImpl类)当前jsp页面范围内有效
request(HttpServletRequest类)一次请求内有效
session(HttpSession类)一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
application(ServletContext类)整个web工程范围内有效(只要web工程不停止,数据都在)
  • 域对象是可以像Map一样存取数据的对象,四个域对象的功能一样,不同的是它们对数据的存取范围

虽然四个域对象都可以存取数据,但在使用上它们是有优先顺序的
:::tips
四个域在使用的时候,优先顺序从小到大的范围的顺序为:
pageContext —>>> request —>>> session —>>> application
:::

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2022-11-15
  Time: 18:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>scope.jsp页面</h1>
    <%
        pageContext.setAttribute("key", "pageContext");
        request.setAttribute("key", "request");
        session.setAttribute("key", "session");
        application.setAttribute("key", "application");
    %>
    pageContext域是否有值<%=pageContext.getAttribute("key")%><br/>
    request域是否有值<%=request.getAttribute("key")%><br/>
    session域是否有值<%=session.getAttribute("key")%><br/>
    application域是否有值<%=application.getAttribute("key")%><br/>
    <%
        request.getRequestDispatcher("/scope2.jsp").forward(request, response);
    %>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2022-11-15
  Time: 18:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>scope2.jsp页面</h1>
    pageContext域是否有值<%=pageContext.getAttribute("key")%><br/>
    request域是否有值<%=request.getAttribute("key")%><br/>
    session域是否有值<%=session.getAttribute("key")%><br/>
    application域是否有值<%=application.getAttribute("key")%><br/>
</body>
</html>
  • 刚开始的访问结果

image.png

  • 切换页面,pageContext失效,它只能在自己的jsp页面范围内使用

image.png

  • 刷新界面,即再次请求服务器,request失效,它只能在一次请求内使用

image.png

  • 重新打开浏览器,即先关闭浏览器再重新打开,session失效,session在浏览器关闭后失效

image.png

  • 重启web工程,application失效

image.png

JSP中的out输出和response.getWriter输出的区别

:::tips
response表示响应,我们经常用于设置返回给客户端的内容(输出)
out也是给用户做输出使用的
:::

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2022-11-15
  Time: 18:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
      out.write("out输出1<br/>");
      out.write("out输出2<br/>");
    	response.getWriter().write("response输出1<br/>");
     	response.getWriter().write("response输出2<br/>");
</body>
</html>
  • 我们会发现,即使out和response交换位置,也是response先输出来

image.png
image.png
:::tips
因为当jsp页面中所有代码执行完成会做以下的两个操作:

  1. 执行out.flush()操作,会把out缓冲区中的数据追加写入到response缓冲区末尾
  2. 会执行response的刷新操作,把全部数据写给客户端
    :::
    image.png
  • 由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下,我们在jsp页面中统一使用out来进行输出。以免打乱页面输出内容的顺序
    :::tips
    out.write() 输出字符串没有问题
    out.print() 输出任意数据都没有问题(都转换成为字符串后调用的write输出)
    :::
    image.png

  • print()底层 - 都是将其转换成字符串再调用write()方法

image.png

  • write()底层 - 将其强转成字符再传给cb缓冲区数组

image.png

  • 结论:在jsp页面中,可以统一使用out.print()方法来进行输出

JSP的常用标签

JSP静态包含

<%@ include file="/include/footer.jsp">

:::tips
**<%@ include file=“”%> 就是静态包含 **
**file 属性指定你要包含的 jsp 页面的路径 **
**地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ 映射到代码的 web 目录 **
**静态包含的特点: **
**1、静态包含不会翻译被包含的 jsp 页面。 **
2、静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出。
:::

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2022-11-15
  Time: 19:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    头部信息<br/>
    主体内容<br/>
        <%@ include file=""%>这个就是静态包含
            file属性指定你要包含的jsp页面的路径

            地址中第一个斜杠表示为http://ip:port/工程路径/   映射到代码的web目录

            静态包含的特点:
                1. 静态包含不会翻译被包含的jsp页面
                2. 静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出
 		<%@ include file="/include/footer.jsp"%>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2022-11-15
  Time: 19:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    页脚信息<br/>
    改一下内容
    改一下内容
    <%=request.getParameter("username")%>
</body>
</html>

image.png

JSP动态包含

<jsp:include page="/include/footer.jsp">
    <jsp:param name="username" value="bbj"/>
    <jsp:param name="password" value="root"/>
</jsp:include>

:::tips
**<jsp:include page=“”></jsp:include> 这是动态包含 **
**page 属性是指定你要包含的 jsp 页面的路径 **
**动态包含也可以像静态包含一样。把被包含的内容执行输出到包含位置 **
**动态包含的特点: **
**1、动态包含会把包含的 jsp 页面也翻译成为 java 代码 **
**2、动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。 **
**JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false); **
3、动态包含,还可以传递参数
:::

  • 动态包含的底层原理

image.png

JSP标签转发

<jsp:forward page="/scope2.jsp"></jsp:forward>

:::tips
**<jsp:forward page=“”></jsp:forward> 是请求转发标签,它的功能就是请求转发 **
page 属性设置请求转发的路径
:::
image.png

Listener监听器

:::tips

  1. **Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。 **
  2. **Listener 它是 JavaEE 的规范,就是接口 **
  3. 监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理
    :::
  • 极大多数的监听器都没用了,就ServletContextListener还有点用

ServletContextListener监听器

:::tips
**ServletContextListener 它可以监听 ServletContext 对象的创建和销毁。 **
**ServletContext 对象在 web 工程启动的时候创建,在 web 工程停止的时候销毁。 **
监听到创建和销毁之后都会分别调用 ServletContextListener 监听器的方法反馈
:::
image.png
image.png
:::tips
使用ServletContextListener监听器监听ServletContext对象

  1. 编写一个类去实现ServletContextListener
  2. 实现其两个回调方法
  3. 到web,xml中去配置监听器
    :::
package com.zan.listener;

import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;

public class MyServletContextListenerImpl implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext对象被创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext对象被销毁了");
    }
}

image.png

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

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

相关文章

贸易企业缺进项严重,如何减轻13%的增值税税负?

贸易企业缺进项严重&#xff0c;如何减轻13%的增值税税负&#xff1f; 《税筹顾问》专注于园区招商&#xff0c;您的贴身节税小能手&#xff0c;合理合规节税&#xff01; 贸易企业的增值税税负很重&#xff0c;这不仅是因为13%的高额增值税税率&#xff0c;也因为贸易企业缺进…

K8s 部署 Apache Kudu 集群

一、K8s 部署 Apache Kudu 集群 安装规划 组件replicaskudu-master3kudu-tserver3 1. 创建命名空间 vi kudu-ns.yamlapiVersion: v1 kind: Namespace metadata:name: apache-kudulabels:name: apache-kudukubectl apply -f kudu-ns.yaml查看命名空间&#xff1a; kubectl …

傻白入门芯片设计,形式化验证方法学——AveMC工具学习(二十)

一、形式验证方法学 &#xff08;一&#xff09;什么是形式化验证&#xff1f; 形式化验证方法学是使用数学证明的方法&#xff0c;分析设计中所有可能的状态空间来验证设计是否符合预期。形式化验证方法主要有三个方面的应用&#xff1a;定理证明、模型检验和等价性检查。 …

让你不再疑惑语音翻译怎么弄

语音是人类交流的一种最基本的方式&#xff0c;但是当我们需要和来自不同国家或地区的人交流时&#xff0c;语言的限制往往让我们感到无力。然而&#xff0c;如今的语音翻译技术正在以惊人的速度发展&#xff0c;使得我们的声音可以轻松地跨越语言的界限。那么&#xff0c;你知…

强化学习:蒙特卡洛方法(MC)

引入蒙特卡洛方法例子 以抛硬币为例&#xff0c;将结果(正面朝上或反面朝上)表示为作为随机变量 X X X &#xff0c;如果正面朝上则 X 1 X1 X1 &#xff0c;如果反面朝上&#xff0c;则 X − 1 X-1 X−1&#xff0c;现在要计算 E [ X ] E[X] E[X]。    我们通常很容易…

JDK常用的数据类型【1】 ——HashMap(分享篇)

x mod 2^n x & (2^n - 1) 1. 拿到 key 的 hashCode 值 2. 将 hashCode 的高位参与运算&#xff0c;重新计算 hash 值 3. 将计算出来的 hash 值与 (table.length - 1) 进行 & 运算数据结构 1.B树 和 B树 B树叶子节点可以存放多个元素B树的叶子节点之间是有指针的 红…

网络安全|渗透测试入门学习,从零基础入门到精通—收集信息篇

目录 前面的话 1、收集域名信息 1.1、Whois查询 ​编辑1.2、备案信息查询 2、收集敏感信息 3、收集子域名信息 3.1、子域名检测工具 3.2、搜索引擎枚举 3.3、第三方聚合应用枚举 3.4、证书透明度公开日志枚举 本章小结 前面的话 本人喜欢网络完全的一些知识&#xff…

老油条辞职信写好了,00后卷王的自述,我难道真的很卷?

前言 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xff0c;薪资也从12k涨到了18k&#xff0c;对于工作都还没两年的我来说&#xff0c;还是比较满意的&#xff0c;毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王&#xff0c;感觉自己年轻&#xff0…

出现报错Invalid bound statement (not found): xxx.xxxMapper.方法名 时的几种异常排除方法

报错信息&#xff1a;Invalid bound statement (not found): com.ruoyi.enterpriseman.trade.mapper.TradeEnterpriseMapper.selectTradeEnterpriseList 1.mapper.xml中的namespace和实际的mapper文件不一致 这个问题其实很好解决&#xff0c;瞪大眼睛&#xff0c;仔仔细细看看…

[SSM]Maven详解

目录 Maven 自动化构建工具 Maven简介 Maven的核心概念 maven约定的目录结构 仓库 POM文件 生命周期、命令、插件 Maven在IDEA中的应用 IDEA集成maven IDEA创建Maven版java工程 IDEA创建Maven版web工程 IDEA中导入Maven工程&#xff08;module&#xff09; 依赖管理…

Windows 离线安装mysql5.7

一、下载MySQL5.7最新版 1、官网地址 https://downloads.mysql.com/archives/community/ 2、下载MySQL5.7最新版 下载下图所示的安装包&#xff1a; 二、安装MySQL5.7 1、解压 将刚才下载压缩包解压搭配目录C:\software\mysql-5.7.41&#xff0c;&#xff08;路径大家可…

背完这195道软件测试面试题,帮你轻松拿下提前批offer

前言&#xff1a; 最近在整理字节&#xff0c;阿里&#xff0c;腾讯&#xff0c;京东的面试题&#xff0c;挑了一部分在四个大厂面试题中出现频率比较高的&#xff0c;发现还是基础知识比较多&#xff0c;废话不多说&#xff0c;你们自己看看&#xff0c;这里小编只放了面试题&…

电动超声波硅胶洁面仪单片机开发方案

近来&#xff0c;网红超声波洁面仪受到人们喜爱&#xff0c;特别是爱化妆的女性朋友&#xff0c;常用来清洁脸部肌肤。在本方案中&#xff0c;洁面仪IC采用宇凡微YF单片机&#xff0c;我们提供多种洁面仪方案&#xff0c;根据不同功能需求有多个洁面仪芯片可供选择。 一、超声波…

价值5k的软件测试企业级实战项目,只为了回答你软件测试如何学!

学习软件测试如何学&#xff0c;在回答这个问题之前&#xff0c;我先分析下&#xff0c;在企业中做项目整个测试流程是什么样的&#xff0c;你清楚了整个企业的测试流程&#xff0c;就会清楚企业做测试需要什么&#xff1f;从而也就会明白如何去学测试。 1、需求&#xff1a; …

JDBC --- Java的数据库编程

目录 &#x1f348;一、数据库编程的必备条件 &#x1f349;二、什么是 JDBC JDBC 的优势 &#x1f34a;三、JDBC 使用流程 以及 常用接口和类的讲解 &#x1f361;0. 前置工作 &#x1f36d;1. 引入依赖 &#x1f36c;2. 数据库连接Connection &#x1f36c;3. 创建操…

11-基于51单片机电子密码锁门禁(实物图+原理图+源程序+仿真+论文)全套资料

编号: 011 本系统采用 51单片机 24C02芯片矩阵键盘 继电器 开锁指示灯 LCD1602液晶 蜂鸣器 而成 1.单片机型号:STC89C52/51、AT89C52/51、AT89S52/51可以任选。程序通用 2.采用矩阵按键输入、1602液晶显示、继电器模拟开锁、发光二极管为开锁指示灯&#xff0c;继电器是可以外…

适配器模式(九)

不管怎么样&#xff0c;都要继续充满着希望 上一章简单介绍了建造者模式(八), 如果没有看过, 请观看上一章 一. 适配器模式 引用 菜鸟教程里面的 适配器模式介绍: https://www.runoob.com/design-pattern/adapter-pattern.html 适配器模式&#xff08;Adapter Pattern&#…

出海品牌直播带货:虚拟主播的优势与挑战,以及未来趋势揭秘

随着全球化的发展和网络技术的进步&#xff0c;海外直播带货成为了品牌拓展海外市场的一种新方式。而在这个数字化时代&#xff0c;虚拟主播的出现给海外直播带货带来了全新的可能性。 在传统直播带货中&#xff0c;品牌需要派遣代表或明星代言人亲自现场演示产品&#xff0c;…

15、Nginx---slice模块,大文件分片请求

Nginx的slice模块可以将一个请求分解成多个子请求&#xff0c;每个子请求返回响应内容的一个片段&#xff0c;让大文件的缓存更有效率。。 HTTP Range请求&#xff1a; HTTP客户端下载文件时&#xff0c;如果发生了网络中断&#xff0c;必须重新向服务器发起HTTP请求&#xff0…

2023年网络安全专业的前景怎么样?

网络安全与我们每一个人都息息相关&#xff0c;无论是企业还是个人&#xff0c;现在都非常重视网络安全。而且网络安全是一个新兴的行业&#xff0c;人才需求量远远大于供给&#xff0c;所以在薪资福利上具有很大的优势&#xff0c;并且对于初学者而言&#xff0c;很多人依旧担…