Java零基础教学文档servlet(1)

【Web开发和HTTP协议】

1. Web开发概述

1.1 web概述
万维网(英语:World Wide Web)亦作WWW、Web、全球广域网,是一个透过互联网访问的,由许多互相链接的超文本组成的信息系统。英国科学家蒂姆·伯纳斯-李于1989年发明了万维网。1990年他在瑞士CERN的工作期间编写了第一个网页浏览器。网页浏览器于1991年1月向其他研究机构发行,并于同年8月向公众开放。

万维网是信息时代发展的核心,也是数十亿人在互联网上进行交互的主要工具。网页主要是文本文件格式化和超文本置标语言(HTML)。除了格式化文字之外,网页还可能包含图片、视频、声音和软件组件,这些组件会在用户的网页浏览器中呈现为多媒体内容的连贯页面。

蒂姆·伯纳斯-李的另一个才华横溢的突破是将超文本嫁接到因特网上。在他的《编织万维网》一书中解释,他曾多次向技术社群的成员暗示这两种技术结合是可行的,但是却没有任何人接受他的建议,他最后只好自己解决了这个计划。他发明了三项关键技术:

  1. 一个全球网络资源唯一认证的系统,统一资源标志符(URI)

  2. 超文本标记语言(HTML)

  3. 超文本传输协议(HTTP)

1.2 B/S架构的诞生
B是浏览器(Web Browser)的缩写。S是(Application Server)应用服务器的缩写

网页浏览器(英语:Web Browser,常简称为浏览器)是一种用于检索并展示万维网信息资源的应用程序。这些信息资源可为网页、图片、影音或其他内容,它们由统一资源标志符标识。信息资源中的超链接可使用户方便地浏览相关信息。网页浏览器虽然主要用于使用万维网,但也可用于获取专用网络中网页服务器之信息或文件系统内之文件。

蒂姆·伯纳斯-李于1990年发明了第一个网页浏览器WorldWideWeb。然后伯纳斯-李雇用了妮可拉·佩洛编写LMB浏览器,能在哑终端上显示网页,于1991年发行。

1993年,马克·安德森发布Mosaic——“世界上最流行的浏览器”,进一步推动了浏览器的创新,这使得万维网更易于使用。安德森的浏览器引发了1990年代的互联网热潮。安德森是NCSA中Mosaic团队的领导者,他不久后辞职并成立了自己的公司——Netscape,发布了受Mosaic影响的Netscape Navigator。Netscape Navigator很快便成为世界上最流行的浏览器,市占率一度达到90%。也标志着BS架构的时代到来。

作为应对,错失了互联网浪潮的微软匆促购入了Spyglass公司的技术,发布Internet Explorer。这引发了第一轮浏览器大战。因捆绑于Windows,Internet Explorer于网页浏览器市场获取了主导地位,其市占率于2002年达到最高时超过95%。

1.3 web通信
Web通信采用B/S模式,即浏览器服务器通信。通过超文本传输协议(HTTP,HyperText Transfer Protocol)进行通信。通过浏览器地址栏编写 URL,向服务器发送一个请求,服务器端对该请求做出相应的处理,处理完毕后会向浏览器作出一个响应,将数据发送给浏览器。浏览器做出响应渲染呈现在用户浏览器界面。
在这里插入图片描述

存在于 web 应用服务器可供外界访问的资源就是 web 资源,它分为如下两种:

  1. 静态资源:指 web 页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、多媒体。

  2. 动态资源:指 web 页面中供人们浏览的数据是由程序产生的,不同时间点访问web 页面看到的内容各不相同。比如:JSP/Servlet、ASP、PHP。

2.WEB开发基石-HTTP协议

2.1 HTTP协议背景 ip dns ftp
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

2.2 HTTP协议概述
HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

尽管TCP/IP协议是互联网上最流行的应用,但是在HTTP协议中并没有规定它必须使用或它支持的层。事实上HTTP可以在任何互联网协议或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用,所以其在TCP/IP协议族使用TCP作为其传输层。

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

2.3 HTTP请求协议
2.3.1 格式
在这里插入图片描述
在这里插入图片描述

2.3.2 代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:9999/test" method="post">
    <input type="text" name="username"> </br>
    <button>提交</button>
</form>
</body>
</html>

package com.powernode.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;


public class HttpRequestDataFormat {


    public static void main(String[] args) throws IOException {
        //1. 创建服务
        ServerSocket server = new ServerSocket(9999);
        //2. 监听客户端请求
        while(true){
            Socket client = server.accept();
            // 获取请求数据
            InputStream in = client.getInputStream();
            byte[] b = new byte[1024];
            int len = -1;

            while ((len = in.read(b)) != -1){
                System.out.print(new String(b,0,len));
            }
            in.close();
        }
    }
}

在这里插入图片描述

2.4 HTTP响应协议
2.4.1 格式
在这里插入图片描述
在这里插入图片描述

2.4.2 代码示例

package com.powernode.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *  根据请求的路径,查找到相应的资源  将资源放回给浏览器
 *  1. 规定资源文件夹
 *  2. 根据请求的路径去资源文件夹查找文件
 *  3. 将资源文件使用流数据 返回给浏览器
 * 注意:
 *   资源文件夹路径 : D:\webapps
 *
 *
 */
public class MyServer {

    // 资源目录 根目录
    static  final String BASE_PATH = "D:\\webapps";

    public static void main(String[] args) throws Exception {
        //1. 创建服务
        ServerSocket server = new ServerSocket(9999);
        //2. 监听客户端请求
        while(true){
            Socket client = server.accept();
            // 获取请求数据
            InputStream inputStream = client.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
            // 根据请求路径 查找资源  : 请求路径在 请求行中
            // 读取请求行  请求方法   资源路径   协议
            String requestLine = br.readLine();
            // 根据空格进行分割
            String[] line = requestLine.split(" ");
            // 请求方法
            String method = line[0];
            // 资源路径
            // /test?name=123   test   去掉 ? 后面  ? 后面是查询参数
            String path = line[1]; //   /test/xxx
            // 找到  ? 索引
            int index = path.indexOf("?");
            // 不带查询参数的资源路径
            //  由于 网络路径的分隔是  /  但是 磁盘路径的分隔是  \\
            // 将网络路径 / 转化为  \\
            if (index != -1){
                path = path.substring(0,index);
            }
            // 将网络路径转化为 磁盘路径
            path = path.replaceAll("\\/", "\\\\");
            // 文件绝对路径  : BASE_PATH + path
            path = BASE_PATH + path;
            // 资源绝对路径
            File file = new File(path);
            // 使用输出流 将数据输出
            /**
             *  1. 将磁盘文件读取到内存中
             *  2. 将内存中的数据 利用网络进行输出
             */
            //1. 输入流
            FileReader fis = new FileReader(file);
            BufferedReader reader = new BufferedReader(fis);
            //2. 循环读写
            /*
             *   写数据 给浏览器 必须遵循HTTP协议  返回数据  属于 响应
             *  响应行
             * 响应头
             * 空行
             * 响应体
             * */
            // 输出流 要向客户端的网络输出
            // 跟 客户端绑定的输出流
            OutputStream outputStream = client.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
            // 响应行
            bw.write("HTTP/1.1 200 OK");
            //换行
            bw.newLine();
            //响应头
            // key:value 换行
            bw.write("Content-Type:text/html;charset=utf-8");
            bw.newLine();
            //空行
            bw.newLine();
            bw.flush();
            //响应体 : 响应体就是具体的文件数据
            //循环 读 和 输出
            String data = null;
            while ((data = reader.readLine()) != null){
                bw.write(data);
                bw.newLine();
                bw.flush();
            }

            bw.close();
            reader.close();
        }

    }


}



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hello  Client!</h1>
</body>
</html>
 

 

在这里插入图片描述

3.应用服务器

3.1 应用服务器的诞生
应用程序服务器(英语:application server)是一种软件框架,提供一个应用程序执行的环境。用于为应用程序提供安全、数据、事务支持、负载平衡大型分布式系统管理等服务。

这个名词最初是用来讨论主从式架构系统时,用来区分数据库服务器、文件服务器等的不同。但现今常指能运行Web应用程序的Web服务器。

为什么会出现应用服务器呢?从程序复用性及架构角度思考。

3.2 Tomcat应用服务器
3.2.1 Tomcat应用服务器概述
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器。目前 Tomcat 最新版本为10。

官网:https://tomcat.apache.org/
在这里插入图片描述

当前最新版本是 Tomcat10,我们课程中使用 Tomcat9。Tomcat7 支持Servlet3.0,而 Tomcat6 只支持 Servlet2.5!

Servlet,JSP 规范与 Tomcat 版本的对应
在这里插入图片描述

3.2.2 Tomcat下载、安装、启动
1.官方下载地址:http://tomcat.apache.org

2.Tomcat 分为安装版和解压版:

安装版是.exe 形式的安装包,双击安装到我们的电脑上,一台电脑上只能安装一个,用的比较少。

解压版,即绿色版,解压后直接使用,解压份数无限制,用的比较多。注意要解压到一个没有中文及空格的文件夹中。例如:D:\soft\tomcat\apache-tomcat-7.0.78

3.启动 Tomcat 服务器:

A.启动前必须配置 JAVA_HOME 环境变量,变量值为 JDK 安装目录。因为 Tomcat 程序本身是用 java 写的,需要用到 JDK。

B.进入到 Tomcat 解压目录下的 bin\startup.bat, 双击可启动 Tomcat 服务器

在这里插入图片描述

C.进入到 Tomcat 解压目录下的 bin\shutdown.bat 双击即可关闭 Tomcat 服务器

D.启动完成后可以在浏览器地址栏输入:http://localhost:8080 来检查 Tomcat 是否

启动成功,如果看到如下页面。则恭喜你成功了
在这里插入图片描述

4.启动问题:如果启动有问题,首先检查 JAVA_HOME 环境变量配置是否正确,再检查8080 端口是否被别的应用程序占用。(Tomcat 默认使用端口号为 8080)

3.2.3 Tomcat目录结构
在这里插入图片描述

3.2.3.1 bin
该目录下存放二进制可执行文件,有 startup.bat 和 shutdown.bat 文件(其余文件无需理会),startup.bat 用来启动 Tomcat,但需要先配置JAVA_HOME 环境变量才能启动,shutdown.bat 用来停止 Tomcat

3.2.3.2 conf
这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:

server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;以后会详细介绍这个文件;

端口配置:

<Connector port="8080" protocol="HTTP/1.1"

           connectionTimeout="20000"

           redirectPort="8443"   />

context.xml:容器默认配置

<?xml version="1.0" encoding="UTF-8"?>

<!-- The contents of this file will be loaded for each web application -->

<Context>



    <!-- Default set of monitored resources. If one of these changes, the    -->

    <!-- web application will be reloaded.                                   -->

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>

    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>



    <!-- Uncomment this to disable session persistence across Tomcat restarts -->

    <!--

    <Manager pathname="" />

    -->

</Context>

web.xml : 服务器自身的默认servlet、支持的媒体类型映射、欢迎页面等配置

<?xml version="1.0" encoding="UTF-8"?>



<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

  version="4.0">



  <!-- ======================== Introduction ============================== -->

  <!-- This document defines default values for *all* web applications      -->

  <!-- loaded into this instance of Tomcat.  As each application is         -->

  <!-- deployed, this file is processed, followed by the                    -->

  <!-- "/WEB-INF/web.xml" deployment descriptor from your own               -->

  <!-- applications.                                                        -->

  <!--                                                                      -->

<!-- “雷锋” servlet配置 -->

    <servlet>

        <servlet-name>default</servlet-name>

        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <init-param>

            <param-name>listings</param-name>

            <param-value>false</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

 <servlet>

        <servlet-name>jsp</servlet-name>

        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

        <init-param>

            <param-name>fork</param-name>

            <param-value>false</param-value>

        </init-param>

        <init-param>

            <param-name>xpoweredBy</param-name>

            <param-value>false</param-value>

        </init-param>

        <load-on-startup>3</load-on-startup>

    </servlet>

<servlet-mapping>

        <servlet-name>default</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>



    <!-- The mappings for the JSP servlet -->

    <servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jsp</url-pattern>

        <url-pattern>*.jspx</url-pattern>

    </servlet-mapping>

<!-- session有效期 -->

 <session-config>

        <session-timeout>30</session-timeout>

 </session-config>

<!-- 媒体映射类型 -->

<mime-mapping>

        <extension>jpg</extension>

        <mime-type>image/jpeg</mime-type>

 </mime-mapping>

<!--  欢迎页面 -->

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

3.2.3.3 lib
Tomcat 的类库,里面是tomcat运行时需要的相关 jar 文件
在这里插入图片描述

3.2.3.4 logs
这个目录中都是日志文件,记录了 Tomcat 启动和关闭的信息,如果启动 Tomcat 时有错误,那么异常也会记录在日志文件中。

3.2.3.5 temp
存放 Tomcat 的临时文件,这个目录下的东西可以在停止 Tomcat 后删除!

3.2.3.6 webapps
存放 web 项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是 tomcat 自带的项目。其中 ROOT 是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是 ROOT 项目。

http://localhost:8080/examples,进入示例项目。其中 examples 就是项目名,即文

件夹的名字。

3.2.3.7 work
运行时生成的文件,最终运行的文件都在这里。通过 webapps 中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成 work 目录。当客户端用户访问一个 JSP 文件时,Tomcat 会通过 JSP 生成 Java 文

件,然后再编译 Java 文件生成 class 文件,生成的 java 和 class 文件都会存放到这个目录下。

3.2.4 创建静态web应用
创建静态 web 应用并访问的步骤如下:

1.在 tomcat 的 webapps 下创建一个 hello 目录;

2.在 webapps\hello\下创建 hello.html,内容如下:
在这里插入图片描述

3.启动 tomcat;

4.打开浏览器访问 http://localhost:8080/hello/hello.html
在这里插入图片描述

5.在同一个教室内,大家可以通过:http://192.168.137.1:8080/hello/hello.html这个地址访问服务。

具体ip查看: cmd—>ipconfig

  1. 查看下请求与响应的信息

  2. 静态web应用于动态web应用

    静态应用:数据在html页面写死

    动态应用:页面中的数据是从数据库中获取

8、tomcat闪退问题:

  1. tomcat软件存放在中文目录下

  2. 计算机名为中文

  3. jdk配置问题:必须配置JAVA_HOME、不要去配置classpath

4.IDEA与Tomcat

给 IDEA配置 Tomcat 服务器后,我们可以把服务器的启动和停止交给 IDEA来管理,简化我们开发,提高开发效率。

4.1 IDEA集成Tomcat
4.1.1 在磁盘的某个根目录解压tomcat
在这里插入图片描述

4.1.2 在IDEA中配置tomcat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

更换为mainwindow.ui更新工程架构

文章目录 前言一、新建带mainwindow.ui的工程1.新建工程2. 添加工程模块添加opencv的库3.添加资源3.1工程上添加资源3.2引用资源 4.添加曲线文件4.1 复制关键文件到新工程4.2 新进显示曲线的ui带.h的为了方面名字取一样4.3添加曲线显示控件4.4 添加工具 5. 添加曲线.h文件内容6…

OpenCV-Python(39):Meanshift和Camshift算法

目标 学习了解Meanshift 和Camshift 算法在视频中找到并跟踪目标 Meanshift 原理 Meanshift算法是一种基于密度的聚类算法&#xff0c;用于将数据点划分为不同的类别。它的原理是通过数据点的密度分布来确定聚类中心&#xff0c;然后将数据点移动到离其最近的聚类中心&#…

UIAlertController简单使用-swift

UIAlertControlle时IOS的对话框控制器&#xff08;警报控制器&#xff09;&#xff0c;简单使用方法如下&#xff1a; 步骤都一样&#xff0c;先是创建UIAlertController&#xff0c;然后创建UIAlertAction&#xff0c;再将UIAlertAction添加到UIAlertController中&#xff0c;…

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战&#xff08;30&#xff09;——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…

TongLINKQ(2):TongLINKQ服务端安装

1 安装前的准备 明确应用&#xff08;JDK&#xff09;和TongLINK/Q的版本、位数&#xff08;要么都是32位&#xff0c;要么都是64位&#xff09;TLQ安装程序使用InstallAnywhere打包而成&#xff0c;因此需要JDK1.5及以上版本。 2 安装步骤 3 选择安装安装包 目前TongLINKQ的…

相信我,努力真的有用!

2023年对很多人来说都是异常艰辛的一年&#xff0c;大环境下的每个人都面对着或多或少的挑战&#xff0c;在这一年的时间里&#xff0c;身边的朋友陆陆续续的跳槽、创业、再就业&#xff0c;结婚&#xff0c;生娃&#xff0c;回老家&#xff0c;每个人渐渐的在时代面前或妥协或…

快速入门Java NIO(New I/O)的网络通信框架--Netty

Netty 入门 了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1. 概述 1.1 Netty 是什么&#xff1f; Netty is an asynchronous event-driven network application framework for rapid …

Linux系统的通配符* ,你可能还不知道的一些规则 。

最近老被同学问到关于通配符操作的问题&#xff0c;本来觉得是一个很简单的问题&#xff0c;结果它和其它命令一结合&#xff0c;就很难给出合理的理解 。进行了很多实验&#xff0c;总是难以有个满意的答案 。于是决定要好好研究一番 &#xff0c;终于在多次的测试和验证过程中…

ElasticSearch分布式搜索引擎(两万字详解)

文章目录 ElasticSearch分布式搜索引擎1.了解ESELK技术栈elasticsearch和lucene为什么不是其他搜索技术&#xff1f;总结倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 2.安装elasticsearch1.部署单点es1.1.创建网络1.2.拉取镜像1…

N5181A/安捷伦Agilent N5181A信号发生器

181/2461/8938产品概述&#xff1a; 规格&#xff08;说明书&#xff09;&#xff1a;表示已校准的仪器在工作温度范围0-55C内存放至少2小时&#xff0c;除非另有说明&#xff0c;并经过45分钟预热期后的保证性能。的指标包括测量不确定度。除非另有说明&#xff0c;本文档中的…

2023年度总结 - 职业生涯第一个十年

2023年只剩下最后一周&#xff0c;又到了一年一度该做年末总结的时候了。 回想起去年&#xff0c;还有人专门建立了一个关于年度总结文章汇总的仓库。读了很多篇别人写的&#xff0c;给了我很多的触动和感想。这里的每篇文章都是关于某个人这一整年的生活和工作的轨迹啊。即使你…

12-桥接模式(Bridge)

意图 将抽象部分与它的实现部分分离&#xff0c;使他们可以独立地变化 个人理解 一句话概括就是只要是在抽象类中聚合了某个接口或者抽象类&#xff0c;就是使用了桥接模式。 抽象类A中聚合了抽象类B&#xff08;或者接口B&#xff09;&#xff0c;A的子类的方法中在相同的场…

流程图用什么软件做?五款优质在线绘制工具看一看

流程图用什么软件做&#xff1f;现在&#xff0c;流程图已经成为了我们工作中不可或缺的工具。它能够清晰地展示各个步骤之间的关系&#xff0c;使我们更好地理解并优化流程。那么&#xff0c;在众多的流程图绘制工具中&#xff0c;哪一款最适合你呢&#xff1f;下面就给大家介…

【办公技巧】ppt修改全部字体怎么改?

制作完PPT之后&#xff0c;想要更换ppt中的字体&#xff0c;有没有什么快捷的方法呢&#xff1f;今天分享两个方法&#xff0c;一键修改ppt文件字体。 方法一&#xff1a; 找到功能栏中的编辑选项卡&#xff0c;点击替换 – 替换字体&#xff0c;在里面选择我们想要替换的字体…

单细胞转录组学对代谢功能障碍相关脂肪变性肝病的类器官模型进行分析

前言 最近接触比较多肝纤维化项目&#xff0c;包括空转、单细胞和普通的BULK转录组&#xff0c;本文是肝脏疾病类器官构建&#xff0c;所以结果是比较确定的&#xff0c;只是对比不同处理和培养哪种效果更好&#xff0c;适合了解纤维化进展和哪些分子和细胞参与&#xff0c;以…

数据可视化大屏自适应,保持比例不变形,满足不同分辨率的需求——利用transform的scale属性缩放,缩放整个页面。

文章目录 一、需求背景&#xff1a;二、需求分析&#xff1a;三、选择方案&#xff1a;四、实现代码&#xff1a;五、效果预览&#xff1a;六、封装组件&#xff1a; 一、需求背景&#xff1a; 数据可视化大屏是一种将数据、信息和可视化效果集中展示在一块或多块大屏幕上的技…

项目中使用iframe引入html 解决路由错乱问题以及父子组件传值调用方法

iframe与外部之间传值 父组件 <iframeid"iframe"src"luckysheet/index.html"frameborder"0"scrolling"no"style"width: 100%; height: 60vh; border: 0"/>const frame document.getElementById(iframe);frame.onloa…

8. 《自动驾驶与机器人中的SLAM技术》基于保存的自定义NDT地图文件进行自动驾驶车辆的激光定位

目录 1. 为 NDT 设计一个匹配度评估指标&#xff0c;利用该指标可以判断 NDT 匹配的好坏。 2. 利用第 1 题的指标&#xff0c;修改程序&#xff0c;实现 mapping 部分的回环检测。 3. 将建图结果导出为 NDT map&#xff0c;即将 NDT 体素内的均值和协方差都存储成文件。 4.…

学习记录11-SPI通信(软件)

目录 前言 一、引脚定义 二、代码 1.初始化 2.操作代码 三、验证 前言 对SPI进行结构封装&#xff0c;方便使用。方便讲解&#xff0c;用W&#xff12;&#xff15;Q&#xff16;&#xff14;芯片进行讲解 一、引脚定义 #define SPI_CS_PROT GPIOB //CS接线引脚通道…

CAN总线记录仪在车企服务站的应用

CAN总线记录仪在车企服务站的应用 CAN总线记录仪在车企服务站中有着广泛的应用。这种设备可以记录车上的CAN总线数据&#xff0c;方便工程师进行分析&#xff0c;以找出可能存在的问题。CAN记录仪一般采用TF卡来存储数据&#xff0c;实现离线脱机实时存储。数据存储完毕后&…