1.tomcat
1.1web中间件选型
| Java代码web中间件(服务) | 说明 |
| tomcat | 开源,组件,功能多。常用 |
| jetty | 功能精简(少一些) |
| jboss | |
| … | |
| weblogic(oracle的) | 会使用oracle数据库(商业,需授权)配合weblogic(商业) |
| 国产: 东方通(TongWEB) | 商业 |
| 直接运行 | 后续补充 |
1.2 jvm-jre-jdk区别
1)jvm-jre-jdk
- java语言:可移植性,一份代码处处运行。—目前国内使用最多
- 只要java写的,服务软件不会瞬间启动,得等待它启动,和php不同。它会把程序代码一点点加载到jvm中,有过程,看catalina.out日志
startup启动标志即可。
- 其他语言一般无法做到这点。
- JVM: java虚拟机(运行在内存中),java代码运行在虚拟机中,只要你能在Linux中安装好JVM环境,就可以运行代码。
- java一般占用系统资源更多,内存–>OOM故障(内存不足,内存溢出)
- JRE(Java Runtime Environment):java运行(时)环境, 提供jvm+必备依赖
- JDK(Java Development Kit):java开发环境, JRE+排障使用的java命令
2)jdk选型
| jdk选型 | 说明 | 补充 |
| jdk(oracle jdk) | 商业版(企业使用收费,个人测试免费) | jdk 8 202之前免费 211之后收费 |
| openjdk | 开源版本(yum源,apt源中有) | 也可以二进制安装 |
| 各厂商的jdk:华为 毕昇 jdk | 根据厂商选择 | |
- 经典jdk版本:jdk 8(jdk 1.8)
- 还有jdk 11 17 21….
- LTS(长期支持版本)
- Java SE 21 (LTS)
- Java SE 17 (LTS)
- Java SE 11 (LTS)
- 具体使用哪个jdk版本,需根据代码的要求。
3)tomcat匹配jdk
- tomcat 9 需要 jdk8-jdk11即可
- tomcat 10 需要 jdk 11
- tomcat 11 需要 jdk 17
1.3急速上手指南
| 角色 | 主机名 | ip |
| tomcat 9+openjdk 11 | web03 | 10.0.0.9/172.16.1.9 |
#1.部署jdk(openjdk)--yum或apt安装即可(yum list |grep openjdk)
yum install -y java-11-openjdk
#2.检查jdk
[root@web03 ~]# java -version
openjdk version "11.0.28" 2025-07-15
OpenJDK Runtime Environment BiSheng (build 11.0.28+6)
OpenJDK 64-Bit Server VM BiSheng (build 11.0.28+6, mixed mode, sharing)
#1.下载二进制包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.111/bin/apache-tomcat-9.0.111.tar.gz
#2.创建目录并解到其中
mkdir -p /app/tools/
tar xf apache-tomcat-9.0.111.tar.gz -C /app/tools
#3.创建软连接
ln -s /app/tools/apache-tomcat-9.0.111/ /app/tools/tomcat
#4.检查tomcat版本信息同时检查jdk
/app/tools/tomcat/bin/version.sh
#5.启动之前先检查8080端口是否被占用(ss),和进程是否存在(ps -ef)
#6.书写systemctl配置文件,让其管理(二进制和编译安装需要书写)
[root@web03 ~]# systemctl cat tomcat
# /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat by Cui
After=network.target
[Service]
Type=forking
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
#6.1修改了文件要让其生效
[root@web03 ~]# systemctl daemon-reload
#7.开启并检查状态
[root@web03 ~]# systemctl enable --now tomcat
[root@web03 ~]# systemctl status tomcat.service
#8.浏览器访问测试(加上8080端口)
http://10.0.0.9:8080
有一键安装tomcat脚本,以上为手动具体操作!
1.4 tomcat目录
| 目录 | 文件 | 说明 |
| bin | tomcat的管理脚本catalina.sh (主脚本)startup.sh (子脚本)shutdown.sh (子脚本) | catalina.sh 做JVM优化修改这个文件 |
| conf | server.xml 主要配置文件logging.properties 日志功能配置文件 | server.xml 主要配置 |
| lib | lib(library) tomcat依赖的目录 | 一般是.jar(依赖)结尾 |
| logs | 日志catalina.out 应用日志,业务日志(错误正确都记录,定时检查/清理)access…log 访问日志 | 一般看业务/应用日志关键词error,failed,exception(异常) |
| webapps | 站点目录 | |
| work | 访问过的内容,加载到jvm中的文件信息 | |
1.5systemctl配置
- systemctl可以管理服务,本质在
/usr/lib/systemd/system/xxxx.service文件
- 位置:/usr/lib/systemd/system/文件名叫
服务名字.service
- 注意格式及用法。
- 二进制/编译安装的服务–>手写systemctl文件。
| systemctl配置 | 说明 |
| [Unit] | 说明信息以及依赖信息 |
| [Service] | 指定服务的启动命令(脚本,命令),关闭命令,重启的命令。Type类型:notify,simple,forking指定变量 |
| [Install] | 指定运行级别: WantedBy=multi-user.target (多用户模式) |
[root@web03 ~]# systemctl cat tomcat
# /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat by Cui
After=network.target
[Service]
Type=forking
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
#后续操作
#1.重新加载systemctl配置
[root@web03 ~]# systemctl daemon-reload
#2.检查并关闭已经运行的java进程
kill
#3.然后systemctl管理tomcat开机自启动并启动服务
[root@web03 ~]# systemctl enable --now tomcat
1.6Java业务如何部署
- 完整流程:java的源代码–>编译(打包)–>war包或jar包
1)war包/jar包如何部署与使用
- war包本质是zip的压缩包:一般需要tomcat(webapps) jdk,tomcat+war
- jar包直接运行(jar包内部塞了一个tomcat或jetty….) jdk(
java命令)+jar
java -jar xxx.jar 其他选项 启动应用(业务)
①war包
以memtest.war为例
1.部署到webapps目录下-->确保tomcat运行中-->自动生成和war包同名的目录-->表明war包自动加载到jvm中
2.查看日志catalina.out
3.浏览器访问:http://ip:8080/memtest/meminfo.jsp
②jar包
以nginxWebUI-3.4.0.jar为例(是一个管理ngx的软件)
1.jar包---运行的时候在jar包所在目录。(相对路径)---这里是/app/code/ngx
2.本质是 java -jar xxx.jar 选项
#前台运行(测试)
java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/ngx/ #指定端口,tomcat也是8080,会冲突
#后台运行(正式)或交给systemctl运行
nohup java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/ngx/ &
③配置开机自启动
方案01:
最简单启动命令写入到 /etc/rc.local
方案02:
书写jar包管理脚本,systemctl调用脚本
#1.思路
bash /xxxx/ngxwebui.sh start 运行:java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/code/ngx/
bash /xxxx/ngxwebui.sh stop 关闭指定的服务
bash /xxxx/ngxwebui.sh restart 先关闭然后启动.
bash /xxxx/ngxwebui.sh status 检查是否运行,如果运行显示pid.
#2.书写systemctl
[root@web03 ~]# cat /usr/lib/systemd/system/ngxwebui.service
[Unit]
Description=ngx_web_ui by Cui
After=network.target
[Service]
Type=forking
ExecStart=bash /server/scripts/ngxwebui.sh start
ExecStop=bash /server/scripts/ngxwebui.sh stop
[Install]
WantedBy=multi-user.target
#3.systemctl daemon-reload
#4.测试检查
systemctl stop ngxwebui
systemctl start ngxwebui
systemctl restart ngxwebui
systemctl status ngxwebui #systemctl自带的
④脚本
核心是case语句
case "$choose" in
start) srv_start ;;
stop) srv_stop ;;
restart) srv_restart ;;
status) srv_status ;;
*) echo input error
esac
1.7打包编译hello全流程
- 未来使用需要独立服务器进行打包操作
- war包/jar包 部署到web节点
- 部署maven(不是服务,是个命令), 需要准备jdk环境
1)下载maven
#1.安装jdk
yum install -y java-11-openjdk
#2.下载maven软件包(3.8.9版本)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.9/binaries/apache-maven-3.8.9-bin.tar.gz
#2.1解压
tar xf apache-maven-3.8.9-bin.tar.gz -C /app/tools/
#2.2软连接
ln -s /app/tools/apache-maven-3.8.9/ /app/tools/maven
#2.3配置PATH环境变量
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
source /etc/profile
#2.4检查(mvn命令)
mvn --version
#3.配置下载加速
mvn编译本质:下载代码需要的jar包依赖,整合依赖生成war包/jar包 #下载的依赖放在~/.m2文件中
mvn默认从官网下载,速度很慢
2)maven配置加速
1.打开Maven的配置文件(windows机器一般在maven安装目录的conf/settings.xml),
在<mirrors></mirrors>标签中添加mirror子节点:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
3)编译
#1.java源代码特征:pom.xml文件在哪,就在哪里操作。-->进入到文件所在的目录
#2.编译
mvn clean package
clean 清除已经生成的war/jar包,不是删除.m2依赖的缓存 package 打包/编译
#3.生成的jar/war包会放在target目录下
4)部署到tomcat中测试
#1.移动到站点目录并改名
mv target/hello-world-war-1.0.0.war /app/tools/tomcat/webapps/hello.war
#2.检查日志catalina.out日志是否加载hello.war成功标记
.......的部署已在[124]毫秒内完成...
#3.最后浏览器访问与测试
1.8部署zrlog
- java版本的博客,war包(编译完的)
- tomcat处理动态,静态。处理动态请求性能好
- zrlog,kodbox,wordpress都是以页面形式配置数据库连接的(背后:连接到对应的库,在库里建表),未来一般是改配置文件。
| 环境 | 说明 | 补充 |
| web03 | jdk+tomcat | |
| db01 | mariadb | zrlog库+zrlog用户+密码 |
#1.在数据库db01节点
#1.1创建数据库zrlog
#1.2添加zrlog用户并配置密码
#2.上传到linux,把zrlog.war放在tomcat的webapps目录下 (移动+改名)
mv zrlog-2.2.1-xxx-release.war /app/tools/tomcat/webapps/zrlog.war
#3.浏览器访问
http://10.0.0.9:8080/zrlog/ 首页(用户角度)
http://10.0.0.9:8080/zrlog/admin/login 后台
小技巧(不用加一层zrlog目录):默认不加目录,找的是站点目录的ROOT下。把zrlog的名字改为ROOT,自动就解压它了
因为已连接好数据库,别直接改,先把tomcat关闭,然后mv ROOT /backup/(把ROOT移走),再mv zrlog.war ROOT.war(改war包)
再mv zrlog/ ROOT(改目录),这样之前的配置(在站点目录的zrlog/WEB-INF/db.properties下)就保留下来了
然后再启动tomcat
[root@web03 /app/tools/tomcat/webapps]# cat zrlog/WEB-INF/db.properties
#This is a database configuration file
#Mon Nov 03 17:08:23 CST 2025
password=lidao
driverClass=com.mysql.cj.jdbc.Driver #java应用连接数据库的插件jdbc
jdbcUrl=jdbc\:mysql\://172.16.1.51\:3306/zrlog?characterEncoding\=UTF-8&allowPublicKeyRetrieval\=true&useSSL\=false&serverTimezone\=GMT
user=zrlog
1.9 tomcat与ngx
总结
- jvm-jre-jdk区别⭐⭐⭐⭐⭐
- tomcat部署⭐⭐⭐⭐⭐
- systemctl配置⭐⭐⭐⭐⭐
- jar包管理脚本+systemctl文件
- war包,jar包,java代码⭐⭐⭐⭐⭐
- zrlog⭐⭐⭐⭐⭐
- 源代码处理流程
- php/python 解释型(有个解释器就行)
- java/golang/C++ 编译型
- 服务管理脚本