Tomcat安装和配置以及多实例部署(附脚本)

TOMCAT详细部署

    • Tomcat服务器简介
      • 核心组件
      • Tomcat 各组件及关系
      • 工作流程
    • Tomcat server.xml 配置详解
      • server
      • service
      • Connector
      • Engine
      • Host
      • Context
      • Valve 阀门
    • Tomcat部署与安装
      • 部署脚本
      • 主要目录说明
    • Tomcat多实例部署
      • 扩展和优化 Tomcat 的 catalina.sh 文件以调整 JVM 参数

Tomcat服务器简介

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。

概括:
1)免费的、开放源代码的Web应用服务器
2)Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
3)由Apache、Sun和一些公司及个人共同开发而成
4)深受Java爱好者的喜爱,并得到部分软件开发商的认可
5)目前比较流行的Web应用服务器
在这里插入图片描述
Apache和Tomcat的区别在于

  • Apache是一个普通的HTTP服务器,主要用于静态网页的访问和处理。
  • Tomcat是一个更强大的应用服务器,主要用于动态网页的访问和处理。
  • Apache不能解释java程序(jsp,serverlet)。
  • Tomcat支持HTML、JSP、ASP、PHP、CGI等。
  • 在独立运行模式下,Tomcat的功能与Apache等效,支持JSP。

核心组件

1.Java Servlet
运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。与CGI(公共网关接口)功能相类似。

2.JSP全称Java Server Pages
一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。 JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

3.Tomcat三大核心组件
Tomcat 由一系列的组件构成,其中核心的组件有三个

Web容器:完成Web服务器的功能。
Servlet 容器:名字为catalina, 用于处理Servlet代码。
JSP容器:用于将JSP动态网页翻译成Servlet代码。

Tomcat 各组件及关系

  • Server 和 Service

  • Connector 连接器

    • HTTP 1.1
    • SSL https
    • AJP( Apache JServ Protocol) apache 私有协议,用于apache反向代理Tomcat
  • Container

    • Engine 引擎 catalina
    • Host 虚拟机 基于域名 分发请求
    • Context 隔离各个WEB应用 每个Context的 ClassLoader都是独立
  • Component

    • Manager (管理器)
    • logger (日志管理)
    • loader (载入器)
    • pipeline (管道)
    • valve (管道中的阀)
      在这里插入图片描述

工作流程

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

Tomcat server.xml 配置详解

server

root元素:server 的顶级配置 主要属性: port:执行关闭命令的端口号 shutdown:关闭命令

演示shutdown的用法 #基于telent 执行SHUTDOWN 命令即可关闭(必须大写) telnet 127.0.0.1 8005 SHUTDOWN

service

服务:将多个connector 与一个Engine组合成一个服务,可以配置多个服务。

Connector

连接器:用于接收 指定协议下的连接 并指定给唯一的Engine 进行处理。 主要属性:

protocol 监听的协议,默认是http/1.1
port 指定服务器端要创建的端口号
minSpareThreads服务器启动时创建的处理请求的线程数
maxThreads 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout指定超时的时间数(以毫秒为单位)
SSLEnabled 是否开启 sll 验证,在Https 访问时需要开启。生成证书: keytool -genkey -v -alias testKey -keyalg RSA -validity 3650
-keystore D:\test.keystore
[ ] 演示配置多个Connector

<Connector port="8860" protocol="org.apache.coyote.http11.Http11NioProtocol"connectionTimeout="20000"redirectPort="8862"URIEncoding="UTF-8"useBodyEncodingForURI="true"compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript"maxThreads="1024" minSpareThreads="200"acceptCount="800"maxConnections="10000"enableLookups="false"/>

Engine

引擎:用于处理连接的执行器,默认的引擎是catalina。一个service 中只能配置一个Engine。 主要属性:name 引擎名称 defaultHost 默认host

Host

虚拟机:基于域名匹配至指定虚拟机。类似于nginx 当中的server,默认的虚拟机是localhost.

 <Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"></Host>

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

Context

应用上下文:一个host 下可以配置多个Context ,每个Context 都有其独立的classPath。相互隔离,以免造成ClassPath 冲突。

Valve 阀门

可以理解成过滤器,具体配置要基于具体的Valve 接口的子类。以下即为一个访问日志的Valve

Tomcat部署与安装

部署脚本

#!/bin/bash
# 切换到/opt目录
cd /opt
# 安装Java Development Kit (JDK) 8
rpm -ivh jdk-8u371-linux-x64.rpm
# 向环境变量配置文件中添加Java环境变量
echo "export JAVA_HOME=/usr/java/jdk1.8.0-x64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH" >>etc/profile.d/java.sh
# 使环境变量配置立即生效
sourse /etc/profile.d/java.sh
# 切换到/opt目录,解压Apache Tomcat 9
cd /opt
tar zxvf apache-tomcat-9.0.78.tar.gz
# 将解压的Tomcat移动到/usr/local/tomcat下
mv -f apache-tomcat-9.0.78 /usr/local/tomcat
# 启动Tomcat
/usr/local/tomcat/bin/startup.sh
# 检查Tomcat启动是否成功
if [ $? -eq 0 ]; thenecho "tomcat启动成功"
elseecho "tomcat启动失败"
fi# 在Tomcat的webapps目录下创建kgc和benet应用目录
mkdir /usr/local/tomcat/webapps/kgc
mkdir /usr/local/tomcat/webapps/benet
# 向kgc和benet应用目录下的index.jsp文件写入内容
echo "This is kgc page\!" >/usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page\!" >/usr/local/tomcat/webapps/benet/index.jsp# 更新Tomcat的server.xml配置文件,以添加对kgc和benet域名的配置
# 创建临时文件来存储更新后的配置
temp_file=$(mktemp)
# 使用sed命令将配置插入到临时文件中
sed "160a\\t<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">\n\t<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true"\n\t/>\n\t</Host>\n\t<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">\n<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true"\n/>\n</Host>" /usr/local/tomcat/conf/server.xml >"$temp_file" &&# 检查是否成功写入临时文件if [ $? -eq 0 ]; then# 在替换原始配置文件之前创建一个备份cp /usr/local/tomcat/conf/server.xml /usr/local/tomcat/conf/server.xml.bak# 替换原始配置文件mv -f "$temp_file" /usr/local/tomcat/conf/server.xml &&echo "Configuration updated successfully."else# 如果写入临时文件失败,记录错误消息并清理临时文件echo "Failed to update configuration."rm "$temp_file"fi
# 重写kgc和benet应用目录下的index.jsp文件内容,确保内容是最新的
echo "This is kgc page\!" >/usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page\!" >/usr/local/tomcat/webapps/benet/index.jsp
# 获取本地eth0网卡的IP地址,并将其与kgc和benet域名一起添加到hosts文件中
local_ip=$(ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d '/' -f 1)
echo "$local_ip www.kgc.com www.benet.com" >> /etc/hosts
# 停止并重新启动Tomcat,以确保配置和内容更新生效
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh
# 验证kgc和benet应用是否可以通过域名访问
curl www.kgc.com:8080/kgc/index.jsp
curl www.benet.com:8080/benet/index.jsp

在这里插入图片描述

小知识
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 virtual machine (java虚拟机),使java程序可以在多种平台上运行class文件。

主要目录说明

●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多实例部署

#!/bin/bash# 定义软件包名称和版本
jdk_package="jdk-8u371-linux-x64.rpm"
tomcat_package="apache-tomcat-9.0.78.tar.gz"
tomcat_version="9.0.78"
tomcat_base_dir="/usr/local/tomcat"# 检查是否以root身份运行
if [ "$(id -u)" != "0" ]; thenecho "Please run as root."exit 1
fi# 检查软件包是否存在
if [ ! -f "/opt/${jdk_package}" ] || [ ! -f "/opt/${tomcat_package}" ]; thenecho "JDK or Tomcat package not found. Please make sure ${jdk_package} and ${tomcat_package} are in /opt."exit 1
fi# 安装JDK
rpm -ivh /opt/${jdk_package}# 解压Tomcat
tar -xf /opt/${tomcat_package} -C /opt || { echo "Tomcat extraction failed."; exit 1; }# 创建Tomcat目录并移动Tomcat
mkdir -p ${tomcat_base_dir} && mv -f /opt/apache-tomcat-${tomcat_version} ${tomcat_base_dir}/tomcat1 # 复制Tomcat实例
cp -a ${tomcat_base_dir}/tomcat1 ${tomcat_base_dir}/tomcat2 || { echo "Tomcat copy failed."; exit 1; }# 编辑环境变量文件
echo "export CATALINA_HOME1=${tomcat_base_dir}/tomcat1
export CATALINA_BASE1=${tomcat_base_dir}/tomcat1
export TOMCAT_HOME1=${tomcat_base_dir}/tomcat1
#tomcat2
export CATALINA_HOME2=${tomcat_base_dir}/tomcat2
export CATALINA_BASE2=${tomcat_base_dir}/tomcat2
export TOMCAT_HOME2=${tomcat_base_dir}/tomcat2" | tee -a /etc/profile.d/tomcat.sh && source /etc/profile.d/tomcat.sh || { echo "Environment variables configuration failed."; exit 1; }# 修改Tomcat配置文件
sed -i.bak -e '22s/<Server port="8005" shutdown="SHUTDOWN">/<Server port="8006" shutdown="SHUTDOWN">/g' \-e 's/ port="8080" protocol="HTTP\/1.1">/ port="8080" protocol="HTTP\/1.1"/g' \-e 's/ port="8009"/ port="8010" /g' \$CATALINA_HOME2/conf/server.xml || { echo "Tomcat configuration failed."; exit 1; }# 更新start.sh和shutdown.sh文件
for tomcat_instance in 1 2; docat <<EOF > ${tomcat_base_dir}/tomcat${tomcat_instance}/bin/start.sh
export CATALINA_BASE=\${CATALINA_BASE${tomcat_instance}}
export CATALINA_HOME=\${CATALINA_HOME${tomcat_instance}}
export TOMCAT_HOME=\${TOMCAT_HOME${tomcat_instance}}
EOFcat <<EOF > ${tomcat_base_dir}/tomcat${tomcat_instance}/bin/shutdown.sh
export CATALINA_BASE=\${CATALINA_BASE${tomcat_instance}}
export CATALINA_HOME=\${CATALINA_HOME${tomcat_instance}}
export TOMCAT_HOME=\${TOMCAT_HOME${tomcat_instance}}
EOF
done
mkdir -p $CATALINA_HOME1/webapps/kgc
mkdir -p $CATALINA_HOME2/webapps/benet
echo "This is kgc page\!" >$CATALINA_HOME1/webapps/kgc/index.jsp
echo "This is benet page\!" >$CATALINA_HOME2/webapps/benet/index.jsp# 启动Tomcat实例
${tomcat_base_dir}/tomcat1/bin/startup.sh || { echo "Tomcat 1 startup failed."; exit 1; }
${tomcat_base_dir}/tomcat2/bin/startup.sh || { echo "Tomcat 2 startup failed."; exit 1; }echo "Tomcat 1 and Tomcat 2 started successfully."

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

扩展和优化 Tomcat 的 catalina.sh 文件以调整 JVM 参数

通常情况下,catalina.sh 位于 Tomcat 安装目录的 bin 子目录下,如 /usr/local/tomcat/tomcat2/bin/catalina.sh

CATALINA_OPTS="-server \-Xms2048m -Xmx2048m \-Xmn512m \-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m \-XX:NewRatio=3 \-XX:SurvivorRatio=8 \-XX:+UseG1GC \-XX:MaxGCPauseMillis=200 \-XX:InitiatingHeapOccupancyPercent=70 \-XX:+PrintGCDetails \-XX:+PrintGCDateStamps \-XX:+PrintGCCause \-Xloggc:/var/log/tomcat/tomcat_gc.log \-Djava.awt.headless=true \-Dcom.sun.management.jmxremote.port=10086 \-Dcom.sun.management.jmxremote.ssl=false \-Dcom.sun.management.jmxremote.authenticate=false"
-server: 启用服务器模式的 JVM。
-Xms 和 -Xmx: 分别设置堆的初始大小和最大大小,保持一致可以减少堆大小调整带来的开销。
-Xmn: 设置年轻代(Young Generation)大小。
-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize: 设置元空间(MetaSpace,取代了 PermGen)的初始和最大大小。
-XX:NewRatio: 设置老年代与年轻代的大小比例。
-XX:SurvivorRatio: 设置 Eden 区与 Survivor 区的大小比例。
-XX:+UseG1GC: 使用 G1 垃圾收集器,根据实际需求可选用其他适合的 GC 策略。
-XX:MaxGCPauseMillis: 设置期望的最大 GC 停顿时间。
-XX:InitiatingHeapOccupancyPercent: 设置触发并发标记周期的堆占用百分比。
-XX:+PrintGCDetails 等:开启详细的 GC 日志记录,便于分析和调优。
# 禁用显式gc
-XX:+DisableExplicitGC # 自动将System.gc() 调用转换成一个空操作,即应用中调用
System.gc()会变成一个空操作,避免程序员在代码里进行System.gc()这种危险操作。System.gc()除
非是到了万不得已的情况下使用,都应该交给JVM。
-Xloggc: 设置 GC 日志文件路径。
-Djava.awt.headless=true: 防止在无图形界面环境中出现相关异常。
-Dcom.sun.management.jmxremote.*: 开启 JMX 远程监控,便于通过 JConsole 或其他工具监控 JVM 状态。

在这里插入图片描述

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

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

相关文章

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版)

前端工程化Vue使用Node.js设置国内高速npm镜像源&#xff08;踩坑记录版&#xff09; 此篇仅为踩坑记录&#xff0c;并未成功更换高速镜像源&#xff0c;实际解决方法见文末跳转链接。 1.自身源镜像 自身镜像源创建Vue项目下载速度感人 2.更改镜像源 2.1 通过命令行配置 前提…

K8s容器部署maven项目

最近在整一整套devops自动化持续集成的东西&#xff0c;一开始就做好了踩坑的准备。 failed to verify certificate: x509: certificate signed by unknown authority 今天在执行kubectl get nodes的时候报的证书验证问题&#xff0c;看了一圈首次搭建k8s的都是高频出现的问题…

泰坦尼克号乘客生存情况预测分析2

泰坦尼克号乘客生存情况预测分析1 泰坦尼克号乘客生存情况预测分析2 泰坦尼克号乘客生存情况预测分析3 泰坦尼克号乘客生存情况预测分析总 背景描述 Titanic数据集在数据分析领域是十分经典的数据集&#xff0c;非常适合刚入门的小伙伴进行学习&#xff01; 泰坦尼克号轮船的…

基于LM Studio + LLaMA3 建立本地化的ChatGPT

4月19日&#xff0c;Facebook母公司Meta重磅推出了Llama3。即便大家现在对于大厂和巨头频繁迭代AI模型的行为已经见怪不怪&#xff0c;Meta的Llama3仍旧显得与众不同&#xff0c;因为这是迄今最强大的开源AI模型。LLaMA模型通常采用了类似于GPT&#xff08;由OpenAI开发&#x…

【Qt】error LNK2001: 无法解析的外部符号

参考&#xff1a;Qt/VS LNK2019/LNK2001&#xff1a;无法解析的外部符号_qt lnk2001无法解析的外部符号-CSDN博客 微软官方报错文档-链接器工具错误 LNK2019 __declspec error LNK2001: 无法解析的外部符号 "__declspec(dllimport) 原因 以这种为前缀的基本上跟库相关…

pnpm install报错 Value of “this“ must be of type URLSearchParams

执行pnpm install的时候就报错Value of “this” must be of type URLSearchParams 由于之前执行没有出现过这个问题&#xff0c;最近在使用vue3所以使用了高版本的node&#xff0c;怀疑是node版本的问题。 解决&#xff1a; 检查node版本 node -v当前使用的是20.11.0的 修改…

《ESP8266通信指南》7-Arduino 开发8266的环境配置与示例代码烧录

往期 《ESP8266通信指南》6-创建TCP服务器&#xff08;AT指令&#xff09;-CSDN博客 《ESP8266通信指南》5-TCP通信透传模式(AT指令)-CSDN博客 《ESP8266通信指南》4-以Client进行TCP通信&#xff08;AT指令&#xff09;-CSDN博客 《ESP8266通信指南》3-常用AT指令详解-826…

elasticsearch 常用语法汇总

文章目录 前言elasticsearch 常用语法汇总1. 创建索引2. 检索索引信息3. 删除索引4. 文档操作4.1. 对blog_new索引指定文档ID新增4.2. 对blog_new索引不指定文档ID新增&#xff0c;随机文档ID:4.3. 获取文档4.4. 更新文档4.5. 删除文档 5. 查询5.1. 匹配查询5.2. 范围查询5.3. …

HackMyVM-Vulny

目录 信息收集 arp nmap nikto WEB信息收集 主页信息收集 gobuster RCE漏洞 反弹shell 提权 系统信息收集 横向渗透 flock提权 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC…

从NuGet获取OpenTK

OpenTK是一个开源、跨平台的游戏开发库&#xff0c;由MonoGame团队创建。它为C#开发者提供了一个简单易用的接口&#xff0c;以便使用OpenGL、OpenAL和OpenCL进行3D渲染、音频处理和并行计算。OpenTK的目标是提供一个一致且高效的框架&#xff0c;让开发者能够专注于构建他们的…

鸿蒙(HarmonyOS)性能优化实战-Trace使用教程

概述 OpenHarmony的DFX子系统提供了为应用框架以及系统底座核心模块的性能打点能力&#xff0c;每一处打点即是一个Trace&#xff0c;其上附带了记录执行时间、运行时格式化数据、进程或线程信息等。开发者可以使用SmartPerf-Host调试工具对Trace进行解析&#xff0c;在其绘制…

arcgis js 4.x加载SceneLayer并实现基于属性查询定位及高亮

一、代码 <!DOCTYPE html> <html> <head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1,maximum-scale1,user-scalableno"><title></title><link rel…

python批量删除文件

python批量删除文件 1、查询与删除2、添加模块到地址中3、批量删除多个路径中不需要导出的文件 1、查询与删除 mport osdef get_files_in_folder(folder_path):files []for file in os.listdir(folder_path):if os.path.isfile(os.path.join(folder_path, file)):files.appen…

微信小程序:5.数据绑定

在Data中定义数据早wxml中进行数据使用 在data中定义数据 在页面对应的js对象中找到data&#xff0c;然后把数据进行定义即可 Page({data: {motto: Hello World,userInfo: {avatarUrl: defaultAvatarUrl,nickName: ,},hasUserInfo: false,canIUseGetUserProfile: wx.canIUse…

关于OSPF报文学习

目录 一.OSPF学习补充 &#xff08;1&#xff09;OSPF报文头部 &#xff08;2&#xff09;ospf建立邻居关系 1.Hello报文——建立邻居关系 2.hello报文头部 &#xff08;3&#xff09;OSPF建立邻接关系 1.发送DD报文 2.DD报文头部 &#xff08;4&#xff09;关于DR,BD…

pyqt QSplitter控件

pyqt QSplitter控件 QSplitter控件效果代码 QSplitter控件 PyQt中的QSplitter控件是一个强大的布局管理器&#xff0c;它允许用户通过拖动边界来动态调整子控件的大小。这个控件对于创建灵活的、用户可定制的用户界面非常有用。 QSplitter控件可以水平或垂直地分割其包含的子…

Bytebase 2.16.0 - 支持 Oracle 和 SQL Server DML 变更的事前备份

&#x1f680; 新功能 支持 Oracle 和 SQL Server DML 变更的事前备份。 支持在 SQL 编辑器中显示存储过程和函数。 支持兼容 TDSQL 的 MySQL 和 PostgreSQL 版本。 支持把数据库密码存储在 AWS Secrets Manager 和 GCP Secret Manager。 支持通过 IAM 连接到 Google Clou…

目标检测与追踪AI算法模型及边缘计算智能分析网关V4的算法应用

目标检测与追踪是计算机视觉领域中的一个重要任务&#xff0c;主要用于识别图像或视频中的目标&#xff0c;并跟踪它们的运动轨迹。针对这一任务&#xff0c;有许多先进的AI算法模型&#xff0c;例如&#xff1a; YOLO&#xff08;You Only Look Once&#xff09;&#xff1a;…

分布式版本控制系统——Git

分布式版本控制系统——Git 一、Git安装二、创建版本库三、将文件交给Git管理四、Git的工作区和暂存区1.工作区&#xff08;Working Directory&#xff09;2.版本库 五、版本回退和撤销修改1.版本回退2.撤销修改 六、删除文件七、常用基础命令总结八、参考 分布式版本控制系统&…