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

【Tomcat】Tomcat部署及优化

Tomcat

        它是一个免费、开源的web应用服务器;基于java代码开发的软件;处理动态请求和基于Java代码的页面开发;

        可以在html当中写入Java代码,Tomcat可以解析html页面当中的Java代码,执行动态请求以及动态页面

        缺点:机制有问题,如果不对Tomcat(运行资源)进行优化会出现“假死”、停机;Tomcat适用于小集群、小服务、小应用,不适合大并发的场景

        优点:1.免费;2.开源、可以二次封装(魔改);3.可配置性强,可以根据需要进行自定义配置,包括端口号、虚拟主机等;4.安全性较强:Tomcat自带安全机制,可以配置用户认证、授权、加密传输;5.部署应用非常快捷:会自动部署和运行

Tomcat的核心组件

/usr/local/tomcat/webapps    #配置文件的位置
1.web容器:完成web服务器的功能,web应用

流程

web——http(s)——访问页面——指向index.jsp文件

特点

在web容器中,封装了一组文件,在这一组文件中进行集中化管理(管理web动态页面)

2.servlet容器:又叫:catalina,处理servlet代码

就是处理web请求(http),以及生成动态内容的Java类

处理http请求

3.jsp:将jsp动态页面翻译成servlet代码,用标准格式,展示jsp的静态页面

servlet

1.处理http请求

2.生成动态内容后,为了和数据库交互——用户发起请求,jsp当中的

3.会话管理;通过管理用户在不同请求之间的状态,让用户在访问不同页面时保持用户状态

4.与数据库交互,servlet可以连接到数据库,执行查询和更新操作,这就是servlet能够生成动态内容的原因

jsp(Java server pages)

动态页面的开发技术;使用jsp标签index.jsp在html页面中插入Java代码

通过jsp容器把html页面当中的Java代码翻译并执行,然后展示结果

通常以    <%	为开头;以    %>	为结尾
#
面向对象:指的是一种编程范式/思想,客观存在的实体和他们之间的关系,映射到计算机的程序当中
计算机的程序会被组织成一组相互作用的对象,每个对象都有数据(属性)和行为(方法)。类:定义一组属性和方法;类是用来创建对象(实例)
封装:把对象的属性和方法捆绑在一起,提供一个接口,让其他对象使用
继承:一个类可以继承另一个类;分为父类和子类,子类可以重用父类的代码,而且还可以在不修改代码的情况下进行扩展
多态:不同类的对象对相同的消息,做出不同的响应
#

Tomcat的组件结构

Connector:负责对外接收和响应请求,是Tomcat与外界的交通枢纽,监听端口,也可以接受外界请求,交给container处理
Container:负责对内处理业务逻辑Engine:引擎;管理虚拟机(service,一个service可以包含多个虚拟主机),可以管理多个,但是一个service里面只能有一个EngineHost:代表一个虚拟机,也可以叫站点Context:表示web应用,可以包含多个servletwrapper:封装器;最底层容器,每一个wrapper中都封装一个servlet,负责对象实例的创建、执行和销毁
父子关系,工作方式也是从上到下运行

Tomcat处理请求的过程

1.输入网址,请求发送到8080端口,被监听的connector获得;

2.connector会把请求转发到container处理——先到Engine(虚拟主机,查需要访问的是哪个虚拟主机)——然后到host(主机站点,包含请求页面的位置,webapps)——再到contex,就是index.jsp里面的内容——再到wrapper(servlet,响应解析处理请求)——最后到jsp翻译官——进行页面展示

vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_201-amd64#指定jdk的安装路径,jdk解释器,类似于shell的各种工具export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar#CLASSPATH	定义类的环境变量,环境类的库export PATH=$JAVA_HOME/bin:$PATH#可执行文件
bin     存放的启动和关闭Tomcat脚本文件
conf    主配置文件server.xml;contex.html	,host的默认配置信息;tomcat-user.xml认证用户密码的配置文件;web.xml配置servlet的规范标准
lib     tomcat运行库的jar包,一般不动,除非连接第三方——redis数据库
logs    日志文件
webapps   web应用部署的默认目录
work    tomcat的工作目录,存放jsp编译之后的class文件,清除tomcat缓存,就是删除工作目录

JVM***

就是Java的虚拟机,是Java应用程序在计算机上运行的核心组件;jvm负责将编译后的Java字节码(.class文件)解释或者编译成本地的机器码,让计算机能够执行它;jvm还提供了内存管理、垃圾回收和线程管理,确保Java程序在不同平台可以有一致性的功能

JVM优化:

初始内存容量小,容易假死、停机,需要优化

配置文件为catalina.sh        就是servlet代码,
PS Eden Space               堆内存,用来存储新创建的对象
PS Old Gen                  堆内存,用来存储长时间存活的对象
PS Survuvor Space           堆内存,存储创建之后,生命周期较短的对象
Code Cache                  非堆内存,存储已编译的代码
Comoressed Class Space      非堆内存,存储已压缩的类
Metaspace                   非堆内存,存储类的元数据
#堆内存:用来工作的,非堆内存:缓存,存储垃圾的
#适用于小项目使用,东西多了容易出问题
优化命令
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" -server      第一个参数,指定内存池,一定要放在第一个-Xms2048m    初始Java堆的大小,分配JVM的最小内存,这个数值主要看cup,cpu性能高的话,可以设高一些-Xmx2048m    Java堆最大能多大,JVM的最大内存;与硬件内存挂钩,根据官方文档,起始值和最大值保持一致,XMS和XMS设为相同值,内存可以设为物理内存的一半-Xmn768m     新生代的内存大小,官方推荐为整个堆的3/8-XX:ParalleIGCThreads=2     配置并行收集器的线程数;表示同时可以有多少个线程进行垃圾回收-XX:PermSize                设置持久代内存的大小,默认是物理内存的1/4-XX:MaixPermSize=1024m      最大的非堆内存的大小,默认是物理内存的1/4-XX:PermSize=1024m-XX:MaxPermSize=1024m非堆内存是不会被垃圾回收处理机制处理的;-XX:PermSize持久代内存与最大非堆内存不能超出操作系统可用的内存,设置成一样大,可以减轻伸缩堆大小的压力-Djava.awt.headless=true    避免在linux环境下,web不能正常打开以正常显示图片。-XX:+DisableExplicitGC"     避免jvm空间大起大落,影响系统的响应时间。响应速度会很慢。

堆区当中:会进一步区分新、中、老生代

每一个新建的对象占用的空间,就是新生代

Java垃圾回收机制对堆区进行资源回收,新生代中没有被回收的资源就是中生代

中生代没有被回收的就是老生代

整个JVM大小就是:新生代+中生代+老生代+永久代

永久代不包括在垃圾回收机制中

ajp-nio-8009

ajp-nio    连接器的类型;ajp表示使用ajp协议,nio表示进行异步非阻塞
8009     连接器正在监听的端口;connect中的一种
AJP    将tomcat服务器与前端web服务器进行连接通信,提供负载均衡和高效的请求转发

http-nio-8080

处理http请求,是和客户端通信的端口

Tomcat部署虚拟主机配置:

一台服务器上,在一个Tomcat中会部署多个虚拟机服务器,减少系统的资源消耗

hostname    主机名
appBase     存放web程序的目录
unpackWARs    优先对wae文件进行展开,默认就是true
autoDeploy    只要
xmIValidation        
xmlNamespaceAware    

优化Tomcat的启动速度

第一次启动Tomcat时,会发现启动速度非常慢

jdk参数:
vim /etc/java/jdk1.8.0_201-amd64/jre/lib/security/java.securityfile:/dev/urandom#117行,在random前加一个u,表示打开异步非阻塞

自身配置文件的优化

server.xml     针对主配置文件的优化,
redirectPot    如果某连接器支持的协议是http,当接收客户端发来的请求是https,就会启用此端口,8443
maxthreads     Tomcat使用线程来处理请求的,可以创建的最大线程数,也就是并发连接数,默认是200
minsparethreads    最小空闲线程数,开启tomcat时会有多少线程,默认为10
maxsparethreads    最大备用线程,一旦创建的线程超过这个值,Tomcat会关闭不再需要的端口线程,默认是-1,也就是不限制,一般不指定URIEncoding:URL的格式编码,默认utf-8,需要分别指定,所以一般也不动
connectionTimeout    网络连接超时,单位:毫秒;为0则永不超时,一般设为20000毫秒
enablelookups        是否反向解析域名,为了能够获取远程的主机名;一般设置为false,直接返回IP地址,提高了处理能力
disableUpliadTimeout       上传超时时间,设置为true
connectionUploadTimeout    因人而异,看情况;30秒到1分钟
acceptCount    所有可以使用的线程都被占用了,可以传入连接请求的最大队列长度;默认为100,超过100直接丢掉不再处理
compression    是否开启页面和响应数据的压缩;off关,on开,force强制压缩;默认为off,建议on
compressionMinSize      压缩响应的最小值,等于或者小于这个值,就不在压缩了,2048
compressableMimeType    可以被压缩MIME的类型
浏览器和其他互联网应用程序之间处理文件的协议和需要处理的文档的性质和格式
文本    text/html,text/plain
图像    image/jpg    image/gif
音频    audio/wav    audio/mp3
视频    video/mp4    video/avi
应用程序    application/pdf    application/json

实验:

---------------------Tomcat 服务部署-------------------------

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

1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gzsystemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version
3.设置JDK环境变量
vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATHsource /etc/profile.d/java.sh
java -version

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64:
这个命令设置了一个名为JAVA_HOME的环境变量,它指向Java JDK的安装路径。
这对于告诉系统和其他应用程序Java的安装位置非常重要。你需要将路径替换为你实际安装Java的路径。

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:
这个命令设置了一个名为CLASSPATH的环境变量,它用于指定Java类的搜索路径。
在这个命令中,.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 表示当前目录(.)
以及Java工具库(tools.jar)和Java远程调试库(dt.jar)的路径。这些库通常包含一些Java开发所需的类。

export PATH=$JAVA_HOME/bin:$PATH:
这个命令将Java可执行文件的路径添加到系统的PATH环境变量中。
这使得你可以在终端中直接运行Java工具,而不需要输入完整的路径。
这将Java的bin目录添加到了PATH中,使得java、javac等命令可以直接运行。

----------------------------------------------------------------------------------------------------------

CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
dt.jar:是关于运行环境的类库,主要是可视化的 swing 的包。
tools.jar:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDK (Java Development Kit):JDK是Java开发工具包,它是用于开发Java应用程序的软件包。
JDK包括了编译器(javac)、调试器、各种工具、Java标准类库(Java API)、以及Java文档等。
JDK是开发者用来创建、编译和运行Java应用程序的重要组件。

JRE (Java Runtime Environment):JRE是Java运行时环境,它是用于执行Java应用程序的部分。
JRE包括了Java虚拟机(JVM)以及Java类库(Java API),这使得用户能够在计算机上运行已编译的Java程序,
而不需要进行开发。JRE是终端用户需要安装的部分,以便能够运行Java应用程序。

JVM (Java Virtual Machine):JVM是Java虚拟机,它是Java应用程序在计算机上运行的核心组件。
JVM负责将编译后的Java字节码(.class文件)解释或编译成本地机器码,以便计算机能够执行它。
JVM提供了内存管理、垃圾回收、线程管理等功能,以确保Java程序在不同平台上具有相似的行为。

----------------------------------------------------------------------------------------------------------

首先使用文本工具编写java源代码,比如 Hello.java ;

在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,
打印 “Hello World”。

vim Hello.javapublic class Hello {            public static void main(String[] args){System.out.println("Hello world!");}
}javac Hello.java
java Hello#public: 这是一个访问修饰符,表示类是公共的,可以从其他地方访问。
#class: 关键字用于定义一个类。
#Hello: 这是类的名称,这里是一个叫做 "Hello" 的类。

public static void main(String[] args){
public: 访问修饰符,表示这个方法是公共的,可以从其他地方访问。
static: 静态修饰符,表示这个方法属于类而不是实例,可以通过类名直接调用。
void: 这是方法的返回类型,void 表示方法没有返回值。
main: 这是方法的名称,是程序的入口点,当程序运行时会从这里开始执行。
(String[] args): 这是方法的参数列表,args 是一个字符串数组,可以在命令行传递参数给程序。

System.out.println("Hello world!");
System.out: System 是一个类,out 是这个类的一个静态成员,它代表标准输出流。
println: 这是输出方法的名称,它会在控制台输出一行内容。
"Hello world!": 这是要输出的内容,是一个字符串。

4.安装启动Tomcat
#解压tomcat,移动并改名
cd /opt
tar -xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh netstat -natp | grep 8080浏览器访问Tomcat的默认主页 http://192.168.220.112:8080
5.优化tomcat启动速度

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

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

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


/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh ll /usr/local/tomcat/

------主要目录说明----------------------------------------------------------------------------------------------
●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文档
----------------------------------------------------------------------------------------------------------

查看manager文件:
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml<Context antiResourceLocking="false" privileged="true" ><Valve className="org.apache.catalina.valves.RemoteAddrValve"allow=".*" />         #允许所有主机访问。
在conf/tomcat-users.xml中,添加账户密码
vim /usr/local/tomcat/conf/tomcat-users.xml#在21行后插入两行内容
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
重启一下tomcat
cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh回到网页,刷新一下,会弹出登录窗口,输入用户名和密码登录
http://192.168.220.112:8080/manager/html

JVM优化

优化内存池
cd /usr/local/tomcat/bin/
vim catalina.sh---119行---下面插入
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"重启服务
./shutdown.sh
./startup.sh回到网页刷新,可以看到JVM的内存容量增大

Tomcat部署主机配置

创建两个网页文件
cd /usr/local/tomcat/webapps/
#创建两个目录
mkdir kgc benetcd kgc/
vim index.jspThis is kgc \!        #写入一些内容cd ../benet/
vim index.jspThis is benet \!      #写入一些内容
修改配置文件
cd /usr/local/tomcat/conf/
备份一下配置文件再进行修改
cp server.xml server.xml.2023.08.10.bakvim server.xml
在原有的<Host>...</Host>下面添加两组新的<Host><Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>
<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>
重启tomcat
cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh
重定向IP地址
echo "192.168.220.112 www.kgc.com www.benet.com" >> /etc/hosts
来到linux虚拟机,打开浏览器
访问:
www.kgc.com:8080
和
www.benet.com:8080

优化tomcat启动速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
#来到117行,在"random"前加上"u";表示打开异步非阻塞
securerandom.source=file:/dev/urandom

Tomcat 优化——http-nio-8080

cd /usr/local/tomcat/conf/
vim server.xml--71行--  />前插入
minSpareThreads="50" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8" 
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"

重启tomcat

cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh

回到浏览器

http://192.168.220.112:8080/manager/status;
可以看到"http-nio-8080"的连接数扩展成功

相关文章:

【Tomcat】Tomcat部署及优化

Tomcat 它是一个免费、开源的web应用服务器&#xff1b;基于java代码开发的软件&#xff1b;处理动态请求和基于Java代码的页面开发&#xff1b; 可以在html当中写入Java代码&#xff0c;Tomcat可以解析html页面当中的Java代码&#xff0c;执行动态请求以及动态页面 缺点&#…...

xAI与GPT-4:探索宇宙真实本质的AI之战

xAI与GPT-4&#xff1a;AI之战 写在前面第一部分第二部分推动科学研究提升人机交互引发伦理和社会问题 第三部分模型的进一步优化跨领域合作人机融合 最后总结 写在前面 人工智能&#xff08;AI&#xff09;领域的发展一直以来都备受关注&#xff0c;而近期马斯克宣布成立xAI&…...

unity vscode 代码关联 跳转 BUG

一早打开电脑发现代码关联失效了&#xff0c;目测可能跟昨天一些插件更新有关 结论 就这货&#xff0c;开了就没法提示代码关联&#xff0c;估计预览版全是BUG。 另一个坑 同期有个unity插件也是预览版&#xff0c;“非常好使”&#xff0c;当场去世。评论点开有好几个人说用…...

Linux命令200例:tree用于以树状结构显示文件和目录

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…...

[C++项目] Boost文档 站内搜索引擎(5): cpphttplib实现网络服务、html页面实现、服务器部署...

在前四篇文章中, 我们实现了从文档文件的清理 到 搜索的所有内容: 项目背景: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: &#x1fae6;[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…...

PO、VO、DAO、BO、DTO、POJO 能分清吗?

一、PO :(persistant object )&#xff0c;持久对象 可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。 二、VO :(value object) &#xff0c;值对象 通常用于业务层之间的数据传递&#xff0c;和PO一样也是仅仅包含数据而已。但应是抽象出的…...

31 | 独角兽企业数据分析

独角兽企业:是投资行业尤其是风险投资业的术语,一般指成立时间不超过10年、估值超过10亿美元的未上市创业公司。 项目目的: 1.通过对独角兽企业进行全面地分析(地域,投资方,年份,行业等),便于做商业上的战略决策 项目数据源介绍 1.数据源:本项目采用的数据源是近…...

Kotlin语法

整理关键语法列表如下&#xff1a; https://developer.android.com/kotlin/interop?hlzh-cn官方指导链接 语法形式 说明 println("count ${countnum}")字符串里取值运算 val count 2 var sum 0 类型自动推导 val 定义只读变量&#xff0c;优先 var定义可变变量…...

【单片机】51单片机,晨启科技,板子引脚对应关系

一般引脚: sbit beepP2^4; //将单片机的P2.4端口定义为beep.本口用于屏蔽上电后蜂鸣器响 sbit ledP1^0; //将单片机的P1.0端口定义为led&#xff0c;用于点亮LED-D1 sbit DIG1P0^0; //数码管位选1 sbit DIG2P0^1; //数码管位选2P10xFF;//初始化P1引脚全部置高&a…...

Swift 数据类型

在我们使用任何程序语言编程时&#xff0c;需要使用各种数据类型来存储不同的信息。 变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。 所有变量都具有数据类型&#xff0c;以决定能够存储哪种数据。 内置数据类型 Swift…...

2.本地存储

2.1本地存储分类- localStorage 1.作用: 可以将数据永久存储在本地(用户的电脑)&#xff0c;除非手动删除&#xff0c;否则关闭页面也会存在 2.特性: ●可以多窗口(页面)共享(同一浏览器可以共享) ●以键值对的形式存储使用&#xff0c;键值除了数字型都要加引号 3.语法 存…...

win10远程桌面控制Ubuntu服务器 - 内网穿透实现公网远程

文章目录 前言视频教程1. ubuntu安装XRDP2.局域网测试连接3. Ubuntu安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 转载自cpolar极点云文章&#xff1a;树莓派使用Nginx 搭建轻量级网站远程访问 前言 XRDP是一种开源工具&#xff0c;它允许用户通过Windows R…...

【Git】—— 标签管理

目录 &#xff08;一&#xff09;理解标签 1、作用 &#xff08;二&#xff09;创建标签 &#xff08;三&#xff09;操作标签 1、删除标签 2、推送标签 3、删除远程标签 &#xff08;一&#xff09;理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的…...

JS_判断打开的是什么手机品牌,判断是否是手机,平板,pc

判断业务是否是 iphone、华为、小米、oppo、view、三星 打开 手机品牌userAgent库 http://www.fynas.com/ua function judgeBrand(sUserAgent) {var isIphone sUserAgent.match(/iphone/i) iphone;var isHuawei sUserAgent.match(/huawei/i) huawei;var isHonor sUserAge…...

HCIA 动态路由协议之RIP协议

一、动态路由协议分类 动态路由协议&#xff1a;RIP OSPF ISIS BGP EBGP EIGRP IGPRP...... 基于AS进行分类&#xff1a; AS-自治系统 0-65535 其中1-64511公有 64512-65535私有 IGP&#xff1a;内部网关路由协议 EGP&#xff1a;外部网关路由 二、IGP协议的分类&#x…...

提供高品质正规话费充值接口,H5链接,稳定高效!

话费充值接口文档 接口版本&#xff1a;1.0 ―、引言 文档概述 本文档提供话费充值接口规范说明&#xff0c;提供一整套的完整的接入示例(http 接口)供商户参 考&#xff0c;可以帮助商户开发人员快速完成接口开发与联调&#xff0c;实现与话费充值系统的交易互联。 公司官网…...

苍穹外卖day12笔记

一、工作台 联系昨天 要实现的功能和昨天差不多&#xff0c;都是查询数据。 所以我们就写出查询语句&#xff0c;然后直接导入已经写好的代码。 实现效果 查询语句 今日数据 营业额 select count(amount) from orders where status5 and order_time > #{begin} and …...

Prometheus技术文档-基本使用-配置文件全解!!!!!

简介&#xff1a; Prometheus是一个开源的系统监控和告警系统&#xff0c;由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种时间序列数据&#xff0c;比如系统性能、网络延迟、应用程序错误等。Prometheus通过采集监控数据并存储在时间序列数据库中&#xff0c;…...

宋浩高等数学笔记(十一)曲线积分与曲面积分

个人认为同济高数乃至数学一中最烧脑的一章。。。重点在于计算方式的掌握&#xff0c;如果理解不了可以暂时不强求&#xff0c;背熟积分公式即可。此外本贴暂时忽略两类曲面积分之间的联系&#xff0c;以及高斯公式的相关内容&#xff0c;日后会尽快更新&#xff0c;争取高效率…...

安卓如何快速定位native内存泄露。

步骤1&#xff09;cat /proc/pid/status,观察下面俩个指标 RssAnon: 5300 kB //一直增大说明匿名映射的内存增大&#xff0c;malloc本质就是调用匿名映射分 配内存 RssFile: 26884 kB //文件句柄泄露&#…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...