day046-tomcat与部署war包、jar包
文章目录
- 0. 老男孩思想-追女生哲学
- 1. java web中间件
- 2. jdk
- 2.1 jdk、jre、jvm
- 2.2 jdk选型
- 3. tomcat
- 3.1 tomcat与jdk版本兼容关系
- 3.2 安装jdk
- 3.2.1 安装Oracle jdk(通过rpm安装)
- 3.2.2 安装openjdk(通过yum下载)
- 3.3 安装tomcat
- 3.3.1 下载tomcat压缩包
- 3.3.2 启动tomcat,并检查端口和进程
- 3.3.3 浏览器访问
- 3.4 tomcat目录
- 3.5 配置systemctl管理tomcat
- 3.6 部署war包
- 4. 部署jar包-nginxWebUI
- 4.1 前台运行
- 4.2 后台运行
- 4.3 设置为开机自启动
- 4.3.1 方法1:修改服务自启动系统配置文件
- 4.3.2 方法2:书写jar包管理脚本并设置systemctl
- 5. 部署zrlog
- 5.1 web03
- 5.2 db01
- 5.3 测试
- 6. 踩坑记录
- 1. 在/etc/rc.local配置的运行jar包没有开机自启动
- 7. 思维导图
0. 老男孩思想-追女生哲学
- 只要自身能力不太差,只要对女生足够好,就能搞定你要追的女生。—老男孩
- 把握主要矛盾,解决实际问题,不要玩思想游戏
- 以实践为主,只要动手去做,很多问题不像想象的那么难,而且大多数还会迎刃而解🤔
1. java web中间件
java web中间件 | 说明 | 应用场景 |
---|---|---|
tomcat | 开源免费、轻量级、启动速度快、资源占用少 | 中小型web应用、开发测试环境 |
jetty | 高性能、模块化设计,可嵌入到应用程序中; 适合高并发和低延迟场景,支持异步IO | 嵌入式系统、微服务架构; 云原生应用(如kubernetes、Docker环境) |
jboss | 开源、提供企业级功能(如集群、事务管理) | 复杂企业级应用; 金融、电信行业的大型分布式系统 |
weblogic | 商业软件,功能全面(高可用、负载均衡、热部署); 稳定性强,但配置复杂,成本高 | 大型企业关键业务系统(如银行核心系统); 需要Oracle数据库深度集成的场景 |
国产:东方通(TongWeb) | 国产中间件,符合国内安全及行业标准(如等保); 支持国产化软硬件生态(麒麟OS、龙芯CPU) | 政府、军工、金融等对自主可控要求高的领域 |
2. jdk
[第一章 Java基础语法-CSDN博客](https://blog.csdn.net/qq_52174380/article/details/146149996?spm=1001.2014.3001.5501)
2.1 jdk、jre、jvm
2.2 jdk选型
jdk选型 | 说明 |
---|---|
Oracle jdk | 企业使用收费,个人测试免费 |
Openjdk | 开源版本(yum、apt可以下载) |
厂商jdk:华为-毕昇jdk |
- 经典版本:jdk8
- LTS长期支持版本:jdk 11/17/21
3. tomcat
3.1 tomcat与jdk版本兼容关系
tomcat版本 | jdk版本 |
---|---|
tomcat 9 | jdk8 |
tomcat 10 | jdk11 |
tomcat 11 | jdk17 |
3.2 安装jdk
3.2.1 安装Oracle jdk(通过rpm安装)
- 地址:
[Java Downloads | Oracle](https://www.oracle.com/java/technologies/downloads/#java8)
- 下载后上传到kylin,并安装
[root@web03 ~]# rpm -ivh jdk-8u441-linux-x64.rpm
警告:jdk-8u441-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ad986da3: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...1:jdk-1.8-2000:1.8.0_441-7 ################################# [100%]
[root@web03 ~]# java -version
java version "1.8.0_441"
Java(TM) SE Runtime Environment (build 1.8.0_441-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.441-b07, mixed mode)
3.2.2 安装openjdk(通过yum下载)
yum list |grep openjdk
yum install -y java-11-openjdk java-11-openjdk-devel
3.3 安装tomcat
3.3.1 下载tomcat压缩包
- tomcat 10官方下载地址:
[Apache Tomcat® - Apache Tomcat 10 Software Downloads](https://tomcat.apache.org/download-10.cgi)
- 上传到kylin,并解压;可以创建软链接
- 检查tomcat版本信息:
[root@web03 /app/tools/apache-tomcat-10.1.42/bin]# ./version.sh
Using CATALINA_BASE: /app/tools/apache-tomcat-10.1.42
Using CATALINA_HOME: /app/tools/apache-tomcat-10.1.42
Using CATALINA_TMPDIR: /app/tools/apache-tomcat-10.1.42/temp
Using JRE_HOME: /usr
Using CLASSPATH: /app/tools/apache-tomcat-10.1.42/bin/bootstrap.jar:/app/tools/apache-tomcat-10.1.42/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/10.1.42
Server built: Jun 5 2025 22:35:46 UTC
Server number: 10.1.42.0
OS Name: Linux
OS Version: 4.19.90-52.22.v2207.ky10.x86_64
Architecture: amd64
JVM Version: 11.0.27+6
JVM Vendor: BiSheng
3.3.2 启动tomcat,并检查端口和进程
[root@web03 /app/tools/apache-tomcat-10.1.42/bin]# ./startup.sh
Using CATALINA_BASE: /app/tools/apache-tomcat-10.1.42
Using CATALINA_HOME: /app/tools/apache-tomcat-10.1.42
Using CATALINA_TMPDIR: /app/tools/apache-tomcat-10.1.42/temp
Using JRE_HOME: /usr
Using CLASSPATH: /app/tools/apache-tomcat-10.1.42/bin/bootstrap.jar:/app/tools/apache-tomcat-10.1.42/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@web03 /app/tools/apache-tomcat-10.1.42/bin]# ss -lntup |grep 8080
tcp LISTEN 0 100 *:8080 *:* users:(("java",pid=7841,fd=45))
[root@web03 /app/tools/apache-tomcat-10.1.42/bin]# ps -ef|grep [t]omcat
root 7841 1 14 19:03 pts/0 00:00:03 /usr/bin/java -Djava.util.logging.config.file=/app/tools/apache-tomcat-10.1.42/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dsun.io.useCanonCaches=false -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED -classpath /app/tools/apache-tomcat-10.1.42/bin/bootstrap.jar:/app/tools/apache-tomcat-10.1.42/bin/tomcat-juli.jar -Dcatalina.base=/app/tools/apache-tomcat-10.1.42 -Dcatalina.home=/app/tools/apache-tomcat-10.1.42 -Djava.io.tmpdir=/app/tools/apache-tomcat-10.1.42/temp org.apache.catalina.startup.Bootstrap start
3.3.3 浏览器访问
3.4 tomcat目录
目录 | 文件 | 说明 |
---|---|---|
bin | tomcat的管理脚本 | catalina.sh是Tomcat 的主控制脚本,与JVM优化有关 |
conf | server.xml:主要配置文件 logging.properties:日志功能配置文件 | |
lib | 存放依赖的目录 | 存放jar包 |
logs | catalina.out:应用日志,业务日志; access*.log:访问日志 | 业务/应用日志关键词: error、failed、exception…… |
webapps | 站点目录 | |
work | 加载JVM中的文件信息 |
3.5 配置systemctl管理tomcat
- systemctl管理其他服务的本质,是配置了服务的service文件:
/usr/lib/systemd/system
service配置文件 | 说明 |
---|---|
[Unit] | 说明信息以及依赖信息 |
[Service] | 指定服务的启动命令(脚本、命令)、关闭命令、重启命令; Type类型定义了服务的进程启动类型,它直接影响 systemd 如何管理服务进程的生命周期、依赖关系和日志收集。 |
[Install] | 指定服务的运行级别multi-user.target (多用户命令行模式) |
[root@web03 /usr/lib/systemd/system]# cat tomcat.service
# /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat java web container
After=network.target [Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh[Install]
WantedBy=multi-user.target# 重新加载systemctl配置
[root@web03 /usr/lib/systemd/system]# systemctl daemon-reload
# 把之前的tomcat关闭
[root@web03 /usr/lib/systemd/system]# pkill java
[root@web03 /usr/lib/systemd/system]# ps -ef |grep java
root 8143 1345 0 19:28 pts/0 00:00:00 grep --color=auto java
[root@web03 /usr/lib/systemd/system]# ss -lntup |grep 8080
# 使用系统服务管理工具启动tomcat
[root@web03 /usr/lib/systemd/system]# systemctl start tomcat.service
[root@web03 /usr/lib/systemd/system]# ss -lntup |grep 8080
tcp LISTEN 0 100 *:8080 *:* users:(("java",pid=8183,fd=46))
3.6 部署war包
- war包是java web应用程序,需要tomcat运行
- jar包是独立运行的java应用程序,由java程序执行即可
- 上传memtest.war至tomcat的站点目录下:webapps;tomcat会自动解压,生成memtest目录
memtest.war 链接: https://pan.baidu.com/s/1OYpGCWhqpB3X1Cz5cprpkQ?pwd=bvyv 提取码: bvyv
- 需要在浏览器中指定路径和文件名:memifo.jsp,进行访问
4. 部署jar包-nginxWebUI
- 测试jar包文件:nginxWebUI;
nginxWebUI-3.4.0.jar 链接: https://pan.baidu.com/s/1FT-_QdHsxVGhz7QZCMrfHQ?pwd=fifk 提取码: fifk
4.1 前台运行
# 定义字符集,避免乱码
# 定义端口号
# 指定jar包目录
[root@web03 /app/jar]# java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/jar/
- 出现应用程序的logo,表示启动成功
4.2 后台运行
[root@web03 /app/jar]# nohup java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/jar/ &
[1] 8576
[root@web03 /app/jar]# nohup: 忽略输入并把输出追加到'nohup.out'
4.3 设置为开机自启动
4.3.1 方法1:修改服务自启动系统配置文件
- 路径:
/etc/rc.d/rc.local
- 该文件要有执行权限
[root@web03 ~]# tail -n 1 /etc/rc.d/rc.local
nohup java -jar -Dfile.encoding=UTF-8 /app/jar/nginxWebUI-3.4.0.jar --server.port=8848 > /app/jar/log/nginxWebUI.log 2>&1 &
[root@web03 ~]# chmod +x /etc/rc.d/rc.local
[root@web03 ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 578 7月 2 19:54 /etc/rc.d/rc.local
4.3.2 方法2:书写jar包管理脚本并设置systemctl
- 脚本:
#!/bin/bash
##############################################################
# File Name:nginxwebui.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:nginxWebUI管理脚本
############################################################### vars
service="/app/jar/nginxWebUI-3.4.0.jar"
choose=$1
port=8848
log_file="/app/jar/log/nginxWebUI.log"
time=`date +%F_%T`
pid=`ps -ef |grep -w [n]ginxWebUI-3.4.0.jar |awk '{print $2}'`
# function
# 日志函数
function logmsg(){msg="$*"echo "$msg" >> ${log_file}}
# 开启服务
function srv_start(){# jar包检查,文件不存在则退出# 检查是否在运行if [ -n "$pid" ];thenmsg="The program has been started [$time] $service"echo $msglogmsg $msgelsenohup java -jar -Dfile.encoding=UTF-8 ${service} --server.port=${port} 2>&1 &if [ $? -eq 0 ];thenlogmsg start [OK] [$time] $serviceelselogmsg start [Failed] [$time] $servicefifi
}
# 关闭服务
function srv_stop(){if [ -n "$pid" ];thenkill $pidif [ $? -eq 0 ];thenlogmsg stop [OK] [$time] $serviceelselogmsg stop [Failed] [$time] $servicefifi
}# 重启服务
function srv_restart(){srv_stopsleep 1srv_startif [ $? -eq 0 ];thenlogmsg restart [OK] [$time] $serviceelselogmsg restart [Failed] [$time] $servicefi
}
# 查看服务状态
function srv_status(){pid_cnt=`ps -ef |grep -w [n]ginxWebUI-3.4.0.jar |awk '{print $2}' |wc -l`if [ ${pid_cnt} -ge 1 ];thenmsg="running [OK] [$pid] [$time] $service"echo $msg;logmsg $msgelsemsg="stopped [Failed] [$time] $service"echo $msg;logmsg $msgfi
}
# case语句
case "$choose" instart) srv_start ;;stop) srv_stop ;;restart) srv_restart ;;status) srv_status ;;*) echo input error
esac
- 添加脚本执行权限:+x
- 配置systemctl的service文件
[root@web03 /usr/lib/systemd/system]# cat nginxwebui.service
[Unit]
Description=ngx webui
After=network.target[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/server/scripts/nginxwebui.sh start
ExecStop=/server/scripts/nginxwebui.sh stop[Install]
WantedBy=multi-user.target[root@web03 /usr/lib/systemd/system]# systemctl daemon-reload
5. 部署zrlog
- war包:
zrlog-2.2.1-efbe9f9-release.war 链接: https://pan.baidu.com/s/1E0CwameLOy2zGw79x6ncVQ?pwd=jxs6 提取码: jxs6
- 环境
- web03:jdk+tomcat、zrlog代码
- db01:mariadb数据库,需要配置数据库、用户名以及权限
5.1 web03
mv zrlog-2.2.1-efbe9f9-release.war zrlog.war
mv ~/zrlog.war /app/tools/tomcat/webapps/
5.2 db01
# 进入数据库
create database zrlog;
grant all on zrlog.* to 'zrlog'@'172.16.1.%' identified by '1';
select user,host from mysql.user;
5.3 测试
6. 踩坑记录
1. 在/etc/rc.local配置的运行jar包没有开机自启动
- 命令:
nohup java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/jar/ &
- 指定命令输出的日志,再次测试:
nohup java -jar -Dfile.encoding=UTF-8 nginxWebUI-3.4.0.jar --server.port=8848 --project.home=/app/jar/ > /app/jar/log/nginxWebUI.log 2>&1 &
- Error: Unable to access jarfile nginxWebUI-3.4.0.jar
- 使用jar包的绝对路径:
nohup java -jar -Dfile.encoding=UTF-8 /app/jar/nginxWebUI-3.4.0.jar --server.port=8848 > /app/jar/log/nginxWebUI.log 2>&1 &
- 自启动成功
7. 思维导图
https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作