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

Tomcat基础知识

Tomcat基础

Java 编译型、面向对象、一次编译到处运行;

JVM(JAVA虚拟机)运行JAVA的字节码;

JAVA编译流程:

1.安装JDK(Java开发运行环境)

2.安装Maven(Java包管理工具),一键下载依赖、编译、打包

3.下载源代码。git clone

4.使用Maven编译打包生成war包

5.安装配置Tomcat,将ROOT.war包复制成webapps目标中

6.运行Tomcat,war自动解压缩

7.打开浏览器,查看IP地址:8080,是否运行正常

8.使用Nginx反向代理Tomcat

# 详细操作步骤(用来下载别的版本,如果有安装包就不用看啦)
钉钉进入网站——文档——用户手册——Java环境配置——点击进入jdk官网——国旗换成中国,
直接进入中文的网站https://www.oracle.com/cn/java/ 
——点击下载Java——下滑一半点击Java8,Linux,
下载最后一个jdk-8u461-linux-x64.tar.gz

Tomcat介绍

Tomcat是开源web应用服务器,用来部署Java web项目,全称Apache Tomcat。Tomcat轻量级、开源且易于部署,广泛应用于中小型企业项目和开发环境。

工作流程:

总结:Tomcat与Maven的互补性

工具核心职责技术定位协作点
Tomcat运行Web应用,处理HTTP请求运行时容器接收Maven构建的WAR包并提供服务
Maven管理依赖、自动化构建项目开发期工具为Tomcat准备可部署的应用包

Apache、Nginx、Tomcat比较

Apache是用C写的; Nginx是用C写的; Tomcat是用Java写的。

Tomcat是Apache的拓展,更实质的说是Java应用服务器,用于处理JSP后台语言开发的应用,主要用于处理JSP动态网页。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器(主要用于解析servlet/JSP,同时具备http服务),单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等,因此多数都是Apache+Tomcat+JavaSDK的集成。严格的来说,Apache/Nginx 应该叫做[HTTP Server]而Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。

Apache

优点:模块多,功能全面,性能稳定,适合静态HTML

缺点:配置相对复杂,自身不支持动态页面

Nginx

优点:功能较多,负载均衡、反向代理等,速度比Apache快

缺点:轻量级web服务器,功能不如Apache全面

Tomcat

优点:能够处理动态请求,可以独立于Apache运行,支持JSP

缺点:对静态内容和大文件的支持有所欠缺

Windows安装JPress文档

下载安装包,下面三个都在里面:

jdk1.8.0_451

1、配置环境变量

此电脑——属性——高级系统设置——环境变量——新建——变量名:JAVA_HOME,变量值:文件夹路径——确定——双击PATH——新建——输入%JAVA_HOME%\bin——确定×3

2、终端操作

按 win+r 快捷键,打开命令窗口,输入 cmd 指令,点击确定

输入java -version查看版本是否为1.8.0

apache-maven-3.9.10

1、配置环境变量

此电脑——属性——高级系统设置——环境变量——新建——变量名:MAVEN_HOME,变量值:文件夹路径——确定——双击PATH——新建——输入%MAVEN_HOME%\bin——确定×3

2、终端操作

按 win+r 快捷键,打开命令窗口,输入 cmd 指令,点击确定

进入所在目录cd D:\APP\JDK-Tomcat-Maven\apache-maven-3.9.10\bin

输入.\mvn -version查看版本是否为3.9.10

3、编译

返回到文件夹新建名为maven_repository的仓库

进入conf——setting,编辑这个xml文件

添加一句

<localRepository>D:\APP\JDK-Tomcat-Maven\apache-maven-3.9.10\maven_repository</localRepository>

镜像源更新为华为云,原本的可以注释掉

<mirror><id>huaweicloud</id><mirrorOf>*</mirrorOf><url>http://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>

检测是否设置成功,可以在终端输入.\mvm help:system,最后BUILD SUCCESS就成功了。

apache-tomcat-9.0.106

1、配置环境变量

此电脑——属性——高级系统设置——环境变量——新建——变量名:CATALINA_HOME,变量值:文件夹路径——确定——双击PATH——新建——输入%CATALINA_HOME%\bin——确定×3

2、终端操作

按 win+r 快捷键,打开命令窗口,输入 cmd 指令,点击确定

直接输入startup.bat看看能否正常启动,如果跳出一堆乱码就是能启动

3、解决乱码问题

打开apache-tomcat-9.0.65 -> conf -> logging(类型是Properties源文件)

打开方式为vscode,Ctrl键+F,替换,把UTF-8全部替换成GBK

保存并重新启动 tomcat,输入指令:startup.bat,乱码问题得到解决。

4、网页测试能否正常启动

网址输入localhost:8080,同时startup.bat 启动的 tomcat 命令界面不能关闭

5、如果8080端口被占用或想更换访问端口号

编辑:apache-tomcat-9.0.65 -> conf -> server.xml

找到 Connector 标签所在位置(大概70行左右),修改端口号

保存退出,重新启动Tomcat

网页测试,输入localhost和新的端口号

MySQL8.0.20 下载

1、进入官网下载

官网下载地址:https://dev.mysql.com/downloads/mysql/(opens new window)

进入官网下载页面,点击 Archives 进入选择版本页面,下载,解压

2、配置MySQL环境变量

此电脑——属性——高级系统设置——环境变量——系统变量——path——新建——输入MySQL里bin的路径——确定×3

3、Tomcat部署

把项目的war包(桌面的ROOT.war)放进Tomcat的webapps目录里,会自动解压出一个ROOT文件夹,别的不建议删除会变成404

4、无痕模式进入网页,就会出现数据库啦

Centos7 安装Tomcat——192.168.221.20

# 打开xshell,连接xftp
# 在/usr/local/下创建jdk和tomcat两个目录,把压缩包传输过去
# 分别进入对应的目录里解压缩
tar -xvf jdk-8u451-linux-x64.tar.gz
# 编辑全局变量
vim /etc/profile#set java enviroment
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_451
export CLASSPATH=.:$JAVA_HOME/lib.tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATHsource /etc/profile# 查看版本号
java -version### tomcat压缩包同理
tar -xvf apache-tomcat-9.0.106.tar.gz
cd apache-tomcat-9.0.106/
cd bin/
./startup.sh
然后就可以进网页测试是否成功,输入192.168.221.20:8080即可访问默认的首页

如果想要用自己编辑的war包可以用xftp,找D盘——APP——JDK-Tomcat——apache-tomcat-webapps——ROOT.war包(如下图)

Ubuntu安装Tomcat——192.168.221.21

#安装tomcat
apt -y install tomcat9#将项目war包上传至(没有的话刷新或者刷新左边那个键)
/var/lib/tomcat9/webapps#重启tomcat
systemctl restart tomcat9然后就可以进网页测试是否成功,输入192.168.221.21:8080即可访问默认的首页,如果显示的是It works界面,就把/var/lib/tomcat9/webapps目录下的ROOT目录删掉,等待war包重新生成ROOT后再刷新,就会出现数据库界面了。

负载均衡+Tomcat集群+MySQL主从

nginx192.168.221.129(Ubuntu)
Tomcat-1192.168.221.20(Centos7)
Tomcat-2192.168.221.21(Ubuntu)
mycat192.168.221.22(Ubuntu)
MySQL-主192.168.221.30(Centos7)
MySQL-从192.168.221.40(Centos7)

第一步 主从复制

主从同步

主服务器:192.168.221.30(需要安装好MySQL)

从服务器:192.168.221.40(需要安装好MySQL)

一、主库配置,开启主服务器的master的log_bin
vim /etc/my.cnf
+++++++++++++++++++++++++++++++++++++
[mysqld]
... 
# 在后面直接设置主服务器唯一ID
server-id=30
# 启用二进制日志
log-bin= mysql-bin
# 在数据目录创建日志等价于
log-bin=/usr/local/mysql/data/mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个,也可以不写)
# binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT
+++++++++++++++++++++++++++++++++++++
-------------------------------------------------------------------------
二、从库配置开启从服务器的relay log
vim /etc/my.cnf
+++++++++++++++++++++++++++++++++++++
[mysqld]
...
# 在之前配置下方编写从服务器唯一ID
server-id=40
# 启用中继日志
relay-log= mysql-relay
# 在数据目录创建日志等价于 relay-log= /usr/local/mysql/data/mysql-relay
+++++++++++++++++++++++++++++++++++++
# 重启两台服务器上的mysql
/etc/init.d/mysqld restart或者systemctl restart mysqld
-------------------------------------------------------------------------
三、关闭主从数据库服务器防火墙
# 查看防火墙状态(一般已经默认关闭了)
systemctl status firewalld
# 关闭防火墙(如果已关闭可省略)
systemctl stop firewalld
-------------------------------------------------------------------------
四、主数据库创建用户slave并授权
# 在主数据库端(192.168.221.30)
# 登录mysql
mysql -uroot -proot123
# 创建用户slave
create user 'slave'@'%' identified with mysql_native_password by 'root123';
# 授权
grant replication slave on *.* to 'slave'@'%';
# 刷新权限
flush privileges;
-------------------------------------------------------------------------
五、从数据库端验证主数据库slave用户是否可用
# 在从数据库端(192.168.221.40)
# 验证主数据库slave用户是否可用
mysql -uslave -p -h192.168.221.30 -P3306
输入密码root123
测试完就可以退出了
-------------------------------------------------------------------------
六、配置主从节点信息
# 在主数据库端(192.168.221.30)查询服务ID及Master状态
# 登录
mysql -uroot -proot123
# 查询server_id是否和配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效),若一致则跳过这步
# set global server_id = 30;
# 查询Master状态,并记录 File(对应下一步中的master_log_file)并查询Position (对应下一步中的master_log_pos)的值
show master status;
记录下File和Position的值
# 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
-------------------------------------------------------------------------
七、在从数据库设置同步
# 在从数据库(192.168.221.40)
# 退出slave登录的mysql,登录root
mysql -uroot -proot123
# 查询server_id是否和配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效,若一致则跳过这步)
# set global server_id = 40;
# 设置主数据库参数(用上一步创建的slave用户及密码,重登会改变)
change master to 
master_host='192.168.221.30',
master_port=3306,
master_user='slave',
master_password='root123',
master_log_file='mysql-bin.000001',
master_log_pos=2926;
# 开始同步
start slave;
# 查询Slave状态
show slave status\G;
# 查看是否配置成功(或许网会慢,稍等一会儿)
Slave_IO_Running :yes
Slave_SQL_Running :yes,则证明配置成功。(后续可不看)
若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值
# 可以在从服务器my.cnf中添加
slave_skip_errors = ALL  # 跳过错误,继续同步
# 重启MySQL服务
systemctl restart mysqld
# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;
show slave status\G;
-------------------------------------------------------------------------
八、测试主从复制(或者两个yes已经可以了)
# 主服务上执行(192.168.221.30)
mysql -uroot -proot123
# 创建test库,t1表,添加测试数据
create database test1;
use test1;
create table t1(id int,name varchar(30));
insert into t1(id,name) values(1,"aaa");
# 从服务器上执行(192.168.221.40)
mysql -uroot -proot123
# 查看是否同步数据
show databases;
use test1;
show tables;
select * from t1;
-------------------------------------------------------------------------
九、设置远程登录(关闭防火墙沙盒)
# 服务端
# 本地登录MySQL
mysql -uroot -proot123
# 查询用户mysql> select host,user from mysql.user;
# 创建远程登录账号
mysql> create user 'root'@'%' identified with mysql_native_password by 'root123';
# 设置开放权限
mysql> grant all on *.* to 'root'@'%';
# 刷新使权限生效
mysql> flush privileges;

第二步,使用mycat 连接一主一从

mycat:192.168.221.22

安装MySQL

# mysql脚本一键安装
wget 192.168.57.200/Software/mysql_install.sh
# 一键安装
bash mysql_install.sh
# 重新加载
source /etc/profile
bash
# 设置远程登陆账号
# 服务端
# 本地登录MySQL
mysql -uroot -proot123
# 查询用户mysql> select host,user from mysql.user;
# 创建远程登录账号
mysql> create user 'root'@'%' identified with mysql_native_password by 'root123';
# 设置开放权限
mysql> grant all on *.* to 'root'@'%';
# 刷新使权限生效
mysql> flush privileges;

安装mycat2

# 安装JDK1.8
apt install openjdk-8-jdk-headless
# 测试安装,显示java版本是1.8.0则为安装成功
java -version
# 安装MyCAT2
# 创建/usr/local/src
mkdir -p /usr/local/src
# 进入/usr/local/src目录
cd /usr/local/src
# 局域网下载(192.168.57.200)
wget http://192.168.57.200/Software/mycat2-install-template-1.21.zip
wget http://192.168.57.200/Software/mycat2-1.21-release-jar-with-dependencies.jar
# 解压并移动到/usr/local目录下
# 下载解压软件
apt install unzip
# 解压Mycat2
unzip mycat2-install-template-1.21.zip
mv mycat ../
# 修改权限
cd /usr/local/mycat/
chmod +x bin/*
# 把所需的jar复制到mycat/lib目录,mycat2-1.21-release-jar-with-dependencies.jar是MyCAT2依赖文件,缺失会导致MyCAT启动失败
cp /usr/local/src/mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/
# 启动mysql并登录root,验证底层 MySQL 服务是否正常可用,然后退出
service mysqld start 
mysql -uroot -proot123
\q或者exit
# 配置物理库地址
vim /usr/local/mycat/conf/datasources/prototypeDs.datasource.json
全部改成以下
++++++++++++++++++++++++++++++++++++++++++++++++++++++"password": "root123",       #一般只修改这个"user": "root",
++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 配置MyCAT和MySQL的环境变量
vim /etc/profile
在后面添加++++++++++++++++++++++++++++++++++++++++++++
export MYCAT_PATH=/usr/local/mycat
export MYSQL_PATH=/usr/local/mysql
export PATH="$MYSQL_PATH/bin:$MYCAT_PATH/bin:$PATH"
+++++++++++++++++++++++++++++++++++++++++++++++++++++
# ESC:wq退出文件:重新加载配置文件
source /etc/profile
# 启动mycat
cd /usr/local/mycat/bin
./mycat restart
# 查看logs/wrapper.log出现一串信息证明启动成功
cat /usr/local/mycat/logs/wrapper.log
# 连接MyCAT
MyCAT的默认用户是:root
初始密码是:123456
端口号是:8066
mysql -uroot -p123456 -P8066 -h127.0.0.1或者mycli -uroot -P8066 

mycat的一主一从配置

# 先设置远程连接⭐⭐⭐
# 登录MySQL
mysql -uroot -proot123
# 创建远程登录账号
mysql> create user 'root'@'%' identified with mysql_native_password by 'root123';
# 设置开放权限
mysql> grant all on *.* to 'root'@'%';
# 刷新使权限生效
mysql> flush privileges;
​
# 重置配置
/*+ mycat:resetConfig{} */;
# 添加主库读写的数据源 
/*+ mycat:createDataSource
{"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType": "READ_WRITE","maxCon": 1000,"maxConnectTimeout": 3000,"maxRetryCount": 5,"minCon": 1,"name": "m1","password": "root123","type": "JDBC","url": "jdbc:mysql://192.168.221.30:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8","user": "root","weight": 0
}
*/;
# 添加从库读的数据源
/*+ mycat:createDataSource
{"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType": "READ","maxCon": 1000,"maxConnectTimeout": 3000,"maxRetryCount": 5,"minCon": 1,"name": "m1s1","password": "root123","type": "JDBC","url": "jdbc:mysql://192.168.221.40:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8","user": "root","weight": 0
}
*/;
# 查询数据源(会出现三个row)
/*+ mycat:showDataSources{} */\G;
# 创建集群
/*! mycat:createCluster{"clusterType":"MASTER_SLAVE","heartbeat":{"heartbeatTimeout":1000,"maxRetry":3,"minSwitchTimeInterval":300,"slaveThreshold":0},"masters":["m1"],"maxCon":2000,"name":"prototype","readBalanceType":"BALANCE_ALL","replicas":["m1s1"],"switchType":"SWITCH"
} */;
# 查询集群(出现两个row)
/*! mycat:showClusters{} */\G;
## 创建逻辑库
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
## 退出mycat
exit;
## 在conf/schemas/db1.schema.json里修改逻辑库的数据源
vim /usr/local/mycat/conf/schemas/db1.schema.json
## 在里面添加集群的名称,作用是让该集群生成并管理这个库的物理库
"targetName":"prototype",
# 重启mycat
cd /usr/local/mycat/bin
./mycat restart
mysql -uroot -p123456 -P8066 -h127.0.0.1
# 查看数据库
show databases;
use db1;
create table sys_user(id bigint primary key, username varchar(200) not null, address varchar(500));
insert into sys_user(id,username,address) values(1,"xiaoming","wuhan");
# 主库、从库重复查看库和表的操作,同步就说明步骤正确

第三步,配置nginx和Tomcat(步骤省略了)

Nginx(192.168.221.129),浏览器搜索192.168.221.129是默认的欢迎界面,搜索192.168.221.129:8080是默认的数据库登录界面;

Tomcat(192.168.221.20和192.168.221.21),浏览器搜索是数据库登陆界面即可
(1)如果显示的是默认的丑猫页面,说明war包忘了挪进去
(2)如果显示的是It works的war包内容界面,说明自动解析的ROOT包有问题,把他删掉然后等待重新加载出来

cd /var/lib/tomcat9/webapps
rm -rf ROOT
ls

第四步,Nginx和两台Tomcat连接

#前提条件:如果Tomcat显示丑猫首页或者It works的首页,需要把/var/lib/tomcat9/webapps目录下的ROOT目录删掉,等待war包重新生成ROOT后再刷新,就会出现数据库界面了
cd /var/lib/tomcat9/webapps
rm -rf ROOT
ls
#192.168.221.129和192.168.221.20、192.168.221.21连接
#34行,在http模块添加upstream tomcat_servers {server 192.168.221.20:8080;     #第一台Tomcat的IP地址server 192.168.221.21:8080;     #第二台Tomcat的IP地址}
#47行,在location模块添加proxy_pass http://tomcat_servers;# 保留原始Host头proxy_set_header Host $host;# 传递真实客户端IPproxy_set_header X-Real-IP $remote_addr;# 传递经过代理链的客户端IP列表proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 传递请求协议(http/https)proxy_set_header X-Forwarded-Proto $scheme;
#检测语法并重启Nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
#浏览器搜索192.168.221.129显示数据库界面就说明连接上Tomcat了

http://www.dtcms.com/a/395011.html

相关文章:

  • Will、NGC游戏模拟器 Dolphin海豚模拟器2509最新版 电脑+安卓版 附游戏
  • ELK企业级日志分析系统详解:从入门到部署实践
  • 2025年Spring Security OAuth2实现github授权码模式登录
  • Kafka面试精讲 Day 22:Kafka Streams流处理
  • ELK大总结20250922
  • 基于Hadoop生态的汽车全生命周期数据分析与可视化平台-基于Python+Vue的二手车智能估价与市场分析系统
  • 基于TV模型利用Bregman分裂算法迭代对图像进行滤波和复原处理
  • 利用 Perfmon.exe 与 UMDH 组合分析 Windows 程序内存消耗
  • hello算法笔记 02
  • 二级域名解析与配置
  • 如何学习国库会计知识
  • 【读论文】压缩双梳光谱技术
  • Spark Structured Streaming端到端延迟优化实践指南
  • 【.NET实现输入法切换的多种方法解析】,第566篇
  • 性能测试-jmeter13-性能资源指标监控
  • 基于华为openEuler系统安装PDF查看器PdfDing
  • PyTorch 神经网络工具箱核心知识梳理
  • 【LangChain指南】Agents
  • Linux 的进程信号与中断的关系
  • IS-IS 协议中,是否在每个 L1/L2 设备上开启路由渗透
  • pycharm常用功能及快捷键
  • 滚珠导轨在半导体制造中如何实现高精度效率
  • 如何实现 5 μm 精度的视觉检测?不仅仅是相机的事
  • JavaScript学习笔记(六):运算符
  • Jenkins运维之路(制品上传)
  • 20届-高级开发(华为oD)-Java面经
  • 光流估计(可用于目标跟踪)
  • CANoe仿真报文CRC与Counter的完整实现指南:多种方法详解
  • sward入门到实战(4) - 如何编写Markdown文档
  • S32K146-LPUART+DMA方案实现