Tomcat的概念及部署

news2024/9/9 4:47:12

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、Tomcat的概述
    • 1.tomcat 概述
    • 2.tomcat 的主要特点
  • 二、Tomcat的核心组件
    • 1.核心组件关系图
    • 2.核心组件的介绍
      • 2.1 Web容器
      • 2.2 servlet容器
      • 2.3 JSP容器
      • 2.4 Tomcat核心组件的请求方式(交互方式)
        • 2.4.1 Web容器
        • 2.4.2 JSP容器
        • 2.4.3 serverlet容器
      • 2.5 Tomcat处理请求(内部数据流向图)
    • 3.Tomcat的功能组件结构
      • 3.1 Connector
      • 3.2 Container
      • 3.3 Service
    • 4.Container 结构分析(包含了 4 个子容器)
      • 4.1 Engine
      • 4.2 Host
      • 4.3 Context
      • 4.4 Wrapper
    • 5.Tomcat 请求过程
      • 5.1 Tomcat 请求过程图示
      • 5.2 Tomcat 请求过程描述
      • 5.3 Tomcat 详细请求过程
    • 6.Tomcat容器和功能组件
      • 6.1 结构图示
  • 三、Tomcat 服务部署
    • 1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
    • 2.安装JDK
    • 3.设置JDK环境变量
    • 4.测试jdk是否安装成功
    • 5.安装启动Tomcat
    • 6.优化tomcat启动速度
      • 6.1 主要目录说明
  • 四、Tomcat 虚拟主机配置
    • 1.创建 blue 和 sky 项目目录和文件
    • 2.修改 Tomcat 主配置文件 server.xml
    • 3.客户端浏览器访问验证
    • HTTP 请求过程
  • 五、服务出现问题故障排错思路
  • 六、总结


一、Tomcat的概述

1.tomcat 概述

(1)免费的、开放源代码的web应用服务器。

(2)主要处理的是动态页面(做一个运行后端的程序)可以处理静态页面,处理效果不及apache和nginx。

(3)Tomcat 是基于 Java 技术的,可以在多个操作系统上运行。

(4)属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合普遍使用,是开发和调试JSP程序的首选

2.tomcat 的主要特点

(1)易于配置和管理:Tomcat 的配置和管理都非常简单,并且提供了很多方便的工具来进行配置和管理,如管理控制台、命令行工具等。

(2)良好的兼容性:Tomcat 支持使用多种开发框架和编程语言开发 Java Web 应用,如 Java Servlet、Java Server Pages、Java Expression Language 和 Java WebSocket 技术,以及使用 Spring、Hibernate 等开源框架进行开发。

(3)高性能和可靠性:Tomcat 使用了面向多线程的设计,可以处理大量的并发请求,同时它还具有较高的稳定性和可靠性。

二、Tomcat的核心组件

1.核心组件关系图

在这里插入图片描述

2.核心组件的介绍

2.1 Web容器

(1)作用

完成web服务器的功能

(2)tomcat web应用服务的过程

web通过http或https来访问一个页面,页面会指向写的文件。
web容器封装了一组文件,用来集中化管理一组组员的对象,处理一个web动态,就是处理一个web动态页面(web可以指多个文件)

2.2 servlet容器

(1)什么是servlet

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建

(2)作用

做一个链接,对接各个接口的是Catalina来执行

2.3 JSP容器

(1)什么是 JSP

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入Java 代码。标签通常以 <% 开头,以 % > 结束。

JSP是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

(2)作用

用于JSP动态网页翻译成servlet代码

只是用于安装定影的规则,格式来显示静态页面

index.php是给php用的
index.jsp是给tomcat用来
html是给nginx用来

(3)动态页面交互的过程和作用

可以让用户进行交互的一种web的页面,后台(后端)进行交互,index.jsp到tomcat用的Java环境和数据交互

总:

Tomcat是web应用服务器,也是一个servlet/JSP容器。Tomcat作为servlet容器,负责处理客户请求,把请求传送给servlet,并将servlet的响应传送回给客户。

2.4 Tomcat核心组件的请求方式(交互方式)

2.4.1 Web容器

(1)接受、响应请求

(2)展示动态页面

(3)对外接受请求,访问入口和出口

2.4.2 JSP容器

(1)翻译语言:将Java——servlet

(2)index.html——nginx可以直接展示index.php

(3)index.jsp——java环境——和数据库怎么进行交互,链接后段的过程(index.jsp——java类代码——就是执行对接后端的执行代码,所以我们需要在进行与用户交互时,将用户发出的请求、数据、传输到后端,但是index.jsp中的一些Java代码无法直接执行对接或者调用,需要先翻译成可以可直接执行的代码方式——格式serverlet代码格式)

2.4.3 serverlet容器

serverlet代码格式就是用JSP容器来处理

2.5 Tomcat处理请求(内部数据流向图)

在这里插入图片描述
总:用户访问数据经过nginx发送到web容器用index.php类型页面接收Java代码再到JSP容器将前面的index.jsp的代码翻译为servlet代码后交给servlet容器处理通过api接口调用数据库中的信息后再次回给用户。

3.Tomcat的功能组件结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

3.1 Connector

负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。

3.2 Container

负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。

3.3 Service

对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。

4.Container 结构分析(包含了 4 个子容器)

每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器:
4个子容器的作用分别是:

4.1 Engine

引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine

4.2 Host

代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点

4.3 Context

代表一个 Web 应用,包含多个 Servlet 封装器

4.4 Wrapper

封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

总:Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。
容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。

5.Tomcat 请求过程

5.1 Tomcat 请求过程图示

在这里插入图片描述
开发java——写代码——编译jar——打包(war 、jar)
运维放在tomcat并行放在/webapps 当启动tomcat时会自动把包解压,解压成项目目录

5.2 Tomcat 请求过程描述

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

5.3 Tomcat 详细请求过程

假设来自客户的请求为: http://localhost:8080/blue/blue_index.jsp
(1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
(2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
(3) Engine获得请求localhost/blue/blue_index.jsp,匹配它所拥有的所有虚拟主机Host
(4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
(5) localhost Host获得请求/blue/blue_index.jsp,匹配它所拥有的所有Context
(6) Host匹配到路径为/blue的Context(如果匹配不到就把该请求交给路径名为"“的Context去处理)
(7) path=”/blue"的Context获得请求/blue_index.jsp,在它的mapping table中寻找对应的servlet
(8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
(9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
(10)Context把执行完了之后的HttpServletResponse对象返回给Host
(11)Host把HttpServletResponse对象返回给Engine
(12)Engine把HttpServletResponse对象返回给Connector
(13)Connector把HttpServletResponse对象返回给客户browser

6.Tomcat容器和功能组件

6.1 结构图示

在这里插入图片描述
tomcat可以作为运行Java代码环境,只要把Java代码(.class可执行的类文件)或者war包或jar包放在/webapps中,那么在tomcat启动时,就可以解压并运行放在/webapps中的这些应用(只需要修改配置文件)

三、Tomcat 服务部署

在部署Tomcat之前必须安装好jdk,因为jdk是tomcat运行的必要环境

1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下


jdk-8u371-linux-x64.rpm
apache-tomcat-8.5.16.tar.gz 
 
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

在这里插入图片描述

2.安装JDK

cd /opt
#先安装jdk
rpm -ivh jdk-8u371-linux-x64.rpm 
#查看Java的版本信息
java -version
rpm -qpl jdk-8u371-linux-x64.rpm 

在这里插入图片描述

3.设置JDK环境变量

#使用脚本设置jdk的环境变量
vim /etc/profile.d/java.sh
#指定安装的包所在的路径家目录
export JAVA_HOME=/usr/java/jdk1.8.0-x64
#将 CLASSPATH 变量设置为当前目录、$JAVA_HOME/lib/tools.jar 和 $JAVA_HOME/lib/dt.jar 所代表的 Java 类文件搜索路径。
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#指定变量,放入执行文件
export PATH=$JAVA_HOME/bin:$PATH

在这里插入图片描述

#读取脚本
source /etc/profile.d/java.sh
java -version

在这里插入图片描述
代码注释:
CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
dt.jar:是关于运行环境的类库,主要是可视化的 swing 的包。
tools.jar:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。

4.测试jdk是否安装成功


首先使用文本工具编写java源代码,比如 hello.java ;
在命令行中,输入命令:javac hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “hello World”。
 
 
vim hello.java
#类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
public class hello {			
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

javac hello.java
java hello

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.安装启动Tomcat

cd /opt
tar zxvf apache-tomcat-8.5.16.tar.gz 
mv apache-tomcat-8.5.16 /usr/local/tomcat
#启动tomcat #
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start
	
#前台启动
/usr/local/tomcat/bin/catalina.sh run		

netstat -natp | grep 8080

在这里插入图片描述

浏览器访问Tomcat的默认主页 http://192.168.245.111:8080/

在这里插入图片描述

6.优化tomcat启动速度

第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。

vim /usr/java/jdk1.8.0-x64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom

# 关闭Tomcat 应用程序脚本。
/usr/local/tomcat/bin/shutdown.sh 
#开启Tomcat 应用程序脚本。
/usr/local/tomcat/bin/startup.sh 
#查看文件的详情
ll /usr/local/tomcat/

在这里插入图片描述
在这里插入图片描述
命令注释:
(1)/dev/urandom是/dev/random的非阻塞版本,/dev/random的 random pool 依赖于系统中断,因此在系统的中断数不足时,/dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,/dev/random设备可以保证数据的随机性。 /dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。

6.1 主要目录说明

●bin:存放启动和关闭Tomcat的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh三个文件
●conf:存放Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
① server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
② context.xml:所有host的默认配置信息;
③ tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指|定角色等将通过编辑此文件实现;
④ web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MIME映射等默认配置信息;
●lib:存放Tomcat运行需要的库文件的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包
●logs:存放 Tomcat 执行时的日志
●temp:存放 Tomcat 运行时产生的文件
●webapps:存放 Tomcat 默认的 Web 应用部署目录
●work:Tomcat工作日录,存放jsp编译后产生的class文件,一般清除Tomcat缓存的时候会使用到
●src:存放Tomcat 的源代码
●doc:存放Tomcat文档

四、Tomcat 虚拟主机配置

很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。
例如:现在新增两个域名 www.blue.com 和 www.sky.com, 希望通过这两个域名访问到不同的项目内容。

1.创建 blue 和 sky 项目目录和文件

mkdir /usr/local/tomcat/webapps/blue
mkdir /usr/local/tomcat/webapps/sky
echo "This is blue page\!" > /usr/local/tomcat/webapps/blue/index.jsp
echo "This is sky page\!" > /usr/local/tomcat/webapps/sky/index.jsp

2.修改 Tomcat 主配置文件 server.xml

vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.blue.com" appBase="webapps" unpackWARs="true" aut    oDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/blue" path="" reloa    dable="true" />
</Host>

<Host name="www.sky.com" appBase="webapps" unpackWARs="true" aut    oDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/sky" path="" reload    able="true" />


在这里插入图片描述
命令注释:
echo “This is blue page!” > /usr/local/tomcat/webapps/blue/index.jsp
echo “This is sky page!” > /usr/local/tomcat/webapps/sky/index.jsp
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验

docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false

#关闭
/usr/local/tomcat/bin/shutdown.sh  
#启动    
/usr/local/tomcat/bin/startup.sh   

在这里插入图片描述

3.客户端浏览器访问验证

#做域名映射
echo "192.168.245.111 www.blue.com www.sky.com" >> /etc/hosts

浏览器访问 http://www.blue.com:8080/ 页面显示This is blue page!
浏览器访问 http://www.sky.com:8080/ 页面显示This is sky page!
在这里插入图片描述
在这里插入图片描述

HTTP 请求过程

(1)Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
(2)因为引擎的默认虚拟主机是 www.blue.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
(3)访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/blue 目录,解析 index.jsp 并返回。

五、服务出现问题故障排错思路

1.举例:以nginx为例子
可以用nginx -t 查看配置文件有没有错,出现successful成功,这是基础检测,如出现问题:
(1)看日志,systemctl status ,jouranlctl -xe 系统日志
(2)服务在基于PID进行开启服务中间的过程(systemctl systemd),看执行是否有问题
2.遇到一个问题,如何处理,如自己处理不了,该怎么办
反推:
(1)看看之前做了哪些配置
(2)每一步配置有没有格式问题
(3)尝试取消掉之前的配置(配置时要将配置文件备份)
(4)先使用备份的配置文件,文件的内容进行启动等操作,检查是否有问题
(5)如果能启动判断是否是我们自己配置的问题
(6)先执行我们正常操作的步骤,尝试启动,如果失败,反推,从前往后注释掉我们的配置,再次重启是否有问题(一般打错字母或者漏打结尾符号)如果默认配置文件可以被访问到,但修改后访问不到,还原配置,还原配置后也出现问题就是其他操作的问题(系统资源不够——修改内核(使用top查看优化命令等)

六、总结

(1)tomcat是一种web应用服务
(2)tomcat所处的位置一般来说是在nginx之后,作为动态处理的服务
(3)tomcat作用:作为Java类语言开发的应用执行后和持续运行的平台
(4)tomcat的核心组件:web容器、JSP容器、servlet容器
(5)tomcat的工作流程:nginx的80端口到8080是由connector连接器监听,给予容器的engine引擎——host项目的web apps目录中,对应项目的一个代码——通过context传递代码,代码连接——应用的运行场景,最后执行servlet代码(动态请求任务),最后要么对应数据库,要么直接返回给nginx,直接给用户看
在做服务部署与虚拟机主配置的时候遇到服务端口没起来主要的排错思路有:
防火墙的问题——配置JDK环境变量的(vim /etc/profile.d/java.sh)中的路径是否正确、代码是否正确——是否启动了配置文件

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

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

相关文章

7、Redis复制(replica)

Redis复制(replica) 是什么&#xff1f; 就是主从复制&#xff0c;master以写为主&#xff0c;Slave以读为主。当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库 读写分离 容灾恢复 数据备份 水平扩容支撑高并发 案例演示 架构说明 一个Master两个…

SQL-每日一题【182.查找重复的电子邮箱】

题目 表: Person 编写一个 SQL 查询来报告所有重复的电子邮件。 请注意&#xff0c;可以保证电子邮件字段不为 NULL。 以 任意顺序 返回结果表。 查询结果格式如下例。 示例 1: 解题思路 前置知识 count&#xff08;&#xff09; 1.count(*) &#xff1a;统计所有的行数&a…

KMeans算法实现图像分割

1. Kmeans聚类算法简介 由于具有出色的速度和良好的可扩展性&#xff0c;Kmeans聚类算法算得上是最著名的聚类方法。Kmeans算法是一个重复移动类中心点的过程&#xff0c;把类的中心点&#xff0c;也称重心(centroids)&#xff0c;移动到其包含成员的平均位置&#xff0c;然后重…

数据结构和算法-2023.06.29

斐波那契数列 初衷&#x1f481;&#x1f3fb; 说来也是惭愧&#xff0c;入行这么久了&#xff0c;一直没有仔细去思考为什么去做这个&#xff0c;之前一直游想法去好好学学数据结构和算法&#xff0c;一直苦于是重点学习Docker、K8S、JVM&#xff0c;多线程&#xff0c;或者是…

SpringBoot整合Redis缓存管理

1. 添加 Spring Data Redis 依赖启动器。在 chapter06 项目的 pom.xml 文件中添加 Spring Data Redis 依赖 启动器。 <!-- 引入整合 Redis 缓存的依赖启动器 --> <dependency> <groupId> org.springframework.boot </groupId> <artifactId>…

【单片机】STM32F103C8T6单片机,OLED 1.3寸 IIC OLED,STM32F103单片机,I2C OLED

文章目录 main.coled.coled.hOLED_Font.h 效果&#xff1a; main.c #include "sys.h" #include "usart.h" #include "OLED.h"int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 设置NVIC中断分组2:2位抢占优…

C/C++图形库EasyX保姆级使用教程(一) Microsoft Visual Studio 2022和EasyX的下载及安装使用

C/C图形库EasyX保姆级使用教程 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 文章目录 C/C图形库EasyX保姆级使用教程前言一、图形库【EasyX】是什么&#xff1f;二、2.EasyX图形库和Microsoft Visual Studio 2022的安装1.Microsoft Visual Studio 2022&#…

详细讲述,人工智能、机器学习、深度学习、神经网络、自然语言处理、AIGC之间的关系...

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是计算机科学中一个庞大的研究领域&#xff0c;旨在为计算机创造类似人类智能的功能&#xff0c;例如学习、推理、解决问题、识别模式、理解自然语言等。AI的核心目标是使计算机能够执行那些通常需要人类…

sql读取数据直接存成pandas

导包 import pymysql import pandas as pd获取mysql链接 def get_db():#打开数据库连接db pymysql.connect(host*.*.*.*,port3306,user "wws",passwd "yourpasswd",db "youdb")return db db get_db()写sql 读数据保存 sql "select…

【技术分享】RK356X Debian/Ubuntu 系统安装Docker

本文基于IDO-SBC3528主板演示Debian/Ubuntu 系统任何安装Docker&#xff0c;方法适用于RK3568全系列产品。 IDO-SBC3528-V1采用RK3568四核64位开发的智能主板&#xff0c;可作为RK3568开发评估板&#xff0c;支持8G大内存&#xff1b;支持PCIE2.0接口&#xff0c;可扩展大容量…

数据结构——直接插入排序与希尔排序(图示+文字详解)

内容包括&#xff1a;排序的代码实现&#xff0c;排序原理详解&#xff0c;代码详解&#xff0c;图示 part 1&#xff1a;直接插入排序 代码实现&#xff1a; void InsertSort(int* a, int n) {int i 0;for (i 0; i < n - 1; i){int end i;int tmp a[i 1];while (en…

【已解决】ubuntu下谷歌浏览器不能上网(而火狐可以上网)

现象&#xff1a;ubuntu18.04安装的谷歌浏览器chrome不能上网(谷歌和百度都不可以)&#xff0c;而火狐可以访问谷歌和百度。 问题解决[参考]&#xff1a;将HTTPS Proxy的代理端口号也设为7890就ok了

thinkphp5---安装到宝塔出现Warning: require(): open_basedir错误

centos系统&#xff0c;nginxphp7.3 使用thinkphp5安装到宝塔的linux上&#xff0c;出现以下错误&#xff1a; Warning: require(): open_basedir restriction in effect. File(/www/wwwroot/c 解决办法&#xff1a;找到 php.ini 打开 open_basedir 修改为&#xff1a; /www/…

4.原子操作类:AtomicLong、LongAdderLong、Accumulator

JUC包中有AtomicInteger、AtomicLong和AtomicBoolean等原子性操作类&#xff0c;它们原理类似&#xff0c;下面以AtomicLong为例进行讲解。 AtomicLong 底层的操作自增自减都用Unsafe类中的getAndAddLong方法&#xff08;获取本类内存偏移值&#xff09;实现的&#xff0c;get…

UE4/5数字人Metahuman与Style3D的使用【二、布料模拟】

目录 鼠标点击布料模拟&#xff1a; 让布料模拟可以跟着动画序列&#xff1a; 有穿模情况&#xff1a; 多件衣服替换&#xff1a; 关卡序列中使用缓存&#xff1a; 效果&#xff1a; UE4/5数字人Metahuman与Style3D的使用【一、Style3DAtelier软件制作smd格式衣服并导入ue】…

Apikit 自学日记:保存、使用测试用例

API测试用例是SaaS版本企业版才能使用的功能&#xff0c;免费版用户可通过付费升级后使用。 API管理应用中的测试用例管理涉及到两个场景&#xff1a;单接口测试用例管理 和 多接口测试用例批量测试。 一、单接口测试用例管理 功能入口&#xff1a;API管理应用 / 选中某个项目…

基于Java+SSM+Vue的高校校园点餐系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

lesson 8下 Zigbee单播通信理论相关概念原理(端点、簇)

目录 Zigbee单播通信理论相关概念原理 端点&#xff08;Endpoint&#xff09; 簇&#xff08;ClusterID&#xff09; 通信数据帧抓包分析 接收过程中的端点和簇&#xff08;接收模块&#xff09; 接收过程中的端点 接收过程中的簇 发送过程中的端点和簇&#xff08;发送…

java适配器模式

一、是什么&#xff1f; 定义: 将一个类的接口变成另外一个类所期待的另一个接口, 从而使因接口不匹配而无法一起工作的两个类能够一起工作 举个例子, 苹果手机想用type-c的充电器充电, 但充电接口不吻合, 所以就选哦一个转接头, 使type-c 能给苹果手机充电, 这就是适配器 …

物联网应用中的 Wi-Fi 6

近年来&#xff0c;设备智联在我们的日常生活中越来越常见。从智能家居设备到工业自动化系统&#xff0c;物联网技术正在改变我们与世界交互的方式。随着物联网设备的不断增多&#xff0c;对可靠、高容量和低功耗无线连接的需求变得尤为迫切。这就是 Wi-Fi 6&#xff08;即 802…