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

【Day 51|52 】Linux-tomcat

一、Tomcat 基础概述

1、作用

        Tomcat Tomcat(全称 Apache Tomcat)是 Apache 基金会开发的一款开源的 Web 服务器和 Servlet 容器,主要用于运行 Java 编写的 Web 应用程序,是 Java Web 开发中最常用的服务器之一。

  • 作为 Java Web 应用运行平台,解析并执行 Servlet、JSP 等动态资源
  • 提供 HTTP 服务能力,可直接处理静态资源请求
  • 支持多种 Java EE 规范,如 Servlet、JSP、WebSocket 等
  • 实现请求分发、会话管理、安全控制等核心 Web 服务功能
  • 可与 Apache、Nginx 等 Web 服务器配合,构建高性能 Web 架构

2、应用服务器(Application Server)

// 用于部署、运行和管理基于 Java EE(现 Jakarta EE)规范的企业级应用程序

产品名称归属公司 / 组织开源 / 收费支持的 Java EE 规范程度核心特点
TomcatApache 基金会开源免费仅支持基础 Web 规范(Servlet、JSP、WebSocket 等),不支持 EJB、JMS 等企业级规范轻量、资源占用低、部署简单,社区活跃,是 Java Web 开发的基础工具
WebLogicOracle商业收费支持完整 Java EE(Jakarta EE)规范功能全面,支持高可用集群、分布式事务、安全管理,提供企业级技术支持
WebSphereIBM商业收费支持完整 Java EE(Jakarta EE)规范稳定性极强,集成 IBM 生态工具,支持跨平台部署和大规模集群
TongWeb(东方通)东方通科技商业收费(国产化)支持完整 Java EE 规范,兼容国产化芯片和操作系统国产化替代主力产品,通过等保认证,适配麒麟、欧拉等国产操作系统和鲲鹏芯片
Apusic(金蝶)金蝶软件商业收费支持完整 Java EE 规范,兼容主流 Java 框架与金蝶 ERP 等企业软件深度集成,支持微服务架构,适合业务流程复杂的企业应用
InforSuite(中创软件)中创软件商业收费支持完整 Java EE 规范,强调分布式架构专注于大型分布式应用,支持跨数据中心部署,在金融、交通行业有成熟解决方案
BES Application Server(宝兰德)宝兰德科技商业收费(国产化)支持 Java EE 核心规范,适配国产化生态轻量与企业级功能平衡,通过国产化认证,适合混合云部署

二、Tomcat 安装教程

1、安装 JDK

Tomcat 运行依赖 Java 环境,需安装 JDK 8 及以上版本

  • tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/         

  • // 目前,绝大多数新开发项目和云原生应用已全面转向 JDK 17

  • tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/              //解压到指定目录

  • vim /etc/profile    //配置环境变量

export JAVA_HOME=/usr/local/jdk1.8.0_91  # 指定JDK 8的安装路径
export JAVA_OPTS="-Xms256m -Xmx512m"     # JVM运行参数(初始堆内存256M,最大堆内存512M)
export PATH=$PATH:$JAVA_HOME/bin         # 将JDK的bin目录添加到系统PATH(可直接使用java、javac等命令)

 验证:java -version 显示版本信息即成功


使用 Amazon Corretto 17 的 yum 源(推荐)

步骤 1:添加 Corretto 的 yum 源

# 下载Corretto 17的repo文件(适用于RHEL/CentOS 7)
wget -O /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo

步骤 2:安装 Corretto 17 开发版(包含 javac 等工具)

# 清除yum缓存并更新
yum clean all && yum makecache fast# 安装JDK 17开发版
yum install -y java-17-amazon-corretto-devel

步骤 3:验证安装

java -version  # 应显示类似 "openjdk version "17.0.10" 2024-01-16 LTS"
javac -version  # 开发版会显示javac版本,确认安装成功

2、 安装 Tomcat

Tomcat 官方下载地址:Apache Tomcat® - Welcome!

(需与开发发版本兼容)

  • Binary Distributions(二进制发行版)
    • 根据系统选择对应的安装包(Linux 选 tar.gz,Windows 选 zip)
  • Source Code Distributions(源代码发行版)需编译后使用。

        //注意:Tomcat 的源代码(Source Code)版本不能直接用 make && make install 编译安装,因为 Tomcat 是基于 Java 开发的项目,其构建工具与 C/C++ 项目(依赖 make)不同,主要使用 Ant 或 Maven 进行编译构建。

(1)下载 Tomcat 压缩包(如 apache-tomcat-9.0.80.tar.gz

(2)解压到指定目录:

tar -zxvf apache-tomcat-9.0.80.tar.gz -C /usr/local/
# 重命名便于管理
mv /usr/local/apache-tomcat-9.0.80 /usr/local/tomcat

4、 启动 Tomcat

  • # vim /etc/profile
export CATALINA_HOME=/usr/local/tomcat   # 指定Tomcat的安装路径(Tomcat依赖Java环境)
  • # source /etc/profile
  • # /usr/local/tomcat/bin/catalina.sh start     //临时开启
  • # vim /etc/rc.d/rc.local     //开机自启
export JAVA_HOME=/usr/local/jdk1.8.0_91
export PATH=$PATH:$JAVA_HOME/bin
/usr/local/tomcat/bin/catalina.sh start

验证启动成功:打开浏览器访问 http://localhost:8080,看到 Tomcat 欢迎页即成功

三、Tomcat 相关文件

Tomcat 目录结构及核心文件说明:

  • bin/:存放启动 / 关闭脚本
  • conf/:配置文件目录
    • server.xml:Tomcat 最核心的配置文件,定义服务器的 “骨架”。
    • web.xml:Web 应用的 “全局默认配置”,所有部署在 Tomcat 中的 Web 应用都会继承此配置。
    • tomcat-users.xml:Tomcat 管理界面的用户权限配置文件。
  • webapps/:Web 应用部署目录。存放 Web 应用的目录或 WAR 包,Tomcat 启动时会自动部署该目录下的应用。
    • 直接将应用目录(如 myapp/)复制到 webapps/。
    • 将应用打包为 myapp.war,放入 webapps/,Tomcat 会自动解压部署。
  • logs/:日志文件目录 
    • catalina.out:最关键的日志文件,记录 Tomcat 启动过程、JVM 信息、应用初始化日志、运行时错误等。
    • localhost_access_log.YYYY-MM-DD.txt:访问日志,记录所有客户端请求的详细信息:
  • lib/:存放 Tomcat 运行必需的 Java 类库(.jar),所有 Web 应用可共享这些 jar 包
  • work/:JSP 编译后的 class 文件目录
  • temp/:临时文件目录

Tomcat 配置文件 server.xml

server.xml 是 Tomcat 核心配置文件,位于 conf 目录下,主要配置项说明:

<!-- 服务器根元素,port为关闭端口,用于接收关闭命令的内部端口 -->
<Server port="8005" shutdown="SHUTDOWN"><!-- 服务组件 --><Service name="Catalina"><!-- HTTP连接器,处理HTTP请求  port="8080":HTTP 服务端口,客户端通过此端口访问 Tomcat 应用。 --><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><!-- AJP连接器,与其他Web服务器通信 8009:8443:HTTPS 协议的默认重定向端口,主要用于实现 “HTTP 到 HTTPS 的自动跳转”--><!--提供AJP协议的端口--><Connector protocol="AJP/1.3"address="::1"port="8009"redirectPort="8443"maxParameterCount="1000"/><!-- 引擎组件,处理所有请求 --><Engine name="Catalina" defaultHost="localhost"><!-- 虚拟主机配置 appBase :项目目录--><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 上下文配置,指定Web应用 --><Context path="/myapp" docBase="/path/to/myapp" reloadable="true"/><!--定义访问日志位置、格式--><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%{x-real-ip}i %l %u %t &quot;%r&quot; %s %b %{Referer}i %{User_Agent}"/><!--定义tomcat线程池--><Executor name="tomcatThreadPool" namePrefix="catalina-exec-"maxThreads="300" minSpareThreads="8"/><!--maxThreads=:		 最大线程数minSpareThreads=: 最少的空闲线程数量 --></Host></Engine></Service>
</Server>

主要配置项说明:

  • Connector:配置端口、协议、超时时间等
  • Host:配置虚拟主机,appBase 为应用部署目录
  • Context:配置单个 Web 应用,path 为访问路径,docBase 为应用实际路径

四、从代码开发到应用部署到 Tomcat 的完整流程

1、开发人员本地开发 & 提交代码

  • 开发人员在本地通过 IDE(如 IDEA、Eclipse)编写 Web 应用代码(Java 类、JSP、配置文件等),代码结构需符合 Maven 规范(如src/main/java、src/main/webapp等目录)。

  • 本地开发完成后,通过 Git 进行版本控制:

C:\Users\86150>D:
D:\ops生活\tools\device>git config --global user.name "su_win"
D:\ops生活\tools\device>git config --global user.email "su_win_email@example.com"
D:\ops生活\tools\device>git init
D:\ops生活\tools\device>git status01-SSM.imldevice.sqlpom.xmlsrc/
D:\ops生活\tools\device>git add ./*
D:\ops生活\tools\device>git commit -m "第一次提交:添加了首页文件"
D:\ops生活\tools\device>git remote add origin https://gitee.com/Su_Sylvia/tomcat_test.git
D:\ops生活\tools\device>git push -u origin master

2、从 Git 服务器获取代码

  • yum install git -y

构建服务器(或直接在目标 Tomcat 服务器)上,通过 git clone 拉取最新代码(通常用于构建环境,避免在生产服务器直接操作代码):

# 克隆代码到本地目录
git clone https://git服务器地址/项目仓库.git
# 若已有仓库,拉取最新更新
git pull origin 分支名
[root@sylvia-host-0 ~] git config --global user.name '松间听雪' 
[root@sylvia-host-0 ~] git config --global user.email '16200949+su_sylvia@user.noreply.gitee.com'
[root@sylvia-host-0 ~] git clone https://gitee.com/Su_Sylvia/tomcat_test.git
[root@sylvia-host-0 ~] ls | grep tomcat_test 
# tomcat_test
[root@sylvia-host-0 ~] mv tomcat_test /date/device

3、部署项目运行环境

1、安装项目所需数据库(MySQL、PostgreSQL 等)

#批量卸载系统中已安装的 MySQL 8.x/5.x 相关 RPM 包
rpm -qa | grep mysql | awk -F-8 '{print "rpm -e --nodeps", $1}' | bash  
rpm -qa | grep mysql | awk -F-5 '{print "rpm -e --nodeps", $1}' | bash 
rm -rf /var/lib/mysql  # 数据库数据目录
rm -f /etc/my.cnf      # 配置文件
rm -rf /etc/my.cnf.d   # 配置文件目录
yum clean all  # 清理 yum 缓存的软件包列表和元数据;
rm -rf /var/cache/yum/ # 手动删除 /var/cache/yum/ 目录是彻底清理残留的缓存文件,避免旧的冲突配置影响后续操作(确保 yum 使用最新的仓库信息)。
rpm -ivh https://repo.mysql.com/mysql57-community-release-el7.rpm # 重新安装 MySQL 官方仓库
vim /etc/yum.repos.d/mysql-community.repo  # 确保你需要的 MySQL 版本(比如 5.7)对应的仓库被启用(enabled=1),而其他版本(比如 8.0)被禁用(enabled=0),避免 yum 默认安装其他版本。
yum repolist enabled | grep mysql  # 验证仓库是否生效,输出应包含"mysql57-community"
yum install -y mysql-community-server mysql-community-client mysql-community-libs
# mysql-community-server:MySQL 服务端(核心程序)
# mysql-community-client:客户端工具(如 mysql 命令)
# mysql-community-libs:依赖库(解决 postfix 等软件的 libmysqlclient.so.18 缺失问题)
systemctl start mysqld  # 启动服务
systemctl enable mysqld  # 开机自启
systemctl status mysqld  # 检查状态(应显示"active (running)")

遇见的问题:

(1)yum install mysql-community  ,系统提示mysql57-community-release和mysql-community-release冲突。原因:系统中已经存在旧的 / 重复的 MySQL 仓库配置包(mysql57-community-release-el7-11.noarch),与要安装的包冲突,导致无法继续。

     解决措施:rpm -e --nodeps mysql57-community-release-el7-11.noarch

2、创建项目数据库并导入初始数据

[root@sylvia-host-0 ~] scp -P 55555 /date/device/device.sql  root@192.168.140.20:/usr/local
[root@sylvia-host-0 ~] rm  /date/device/device.sql [root@na-host-2 ~] grep 'temporary password' /var/log/mysqld.log
# 2025-09-10T02:43:44.728774Z 1 [Note] A temporary password is generated for root@localhost: d_r0dk-=Dfht
[root@na-host-2 ~] mysql -uroot -p'd_r0dk-=Dfht'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Su@548165';
mysql> FLUSH PRIVILEGES;
mysql> create user 'device'@'%' identified by 'Device@548165';
mysql> grant all on device.* to 'device'@'%';
mysql> FLUSH PRIVILEGES;[root@na-host-2 ~] mysql -uroot -pSu@548165 < /usr/local/device.sql 
# mysql: [Warning] Using a password on the command line interface can be insecure.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| device             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
mysql> use device;
mysql> show tables;
+------------------+
| Tables_in_device |
+------------------+
| addfacility      |
| admin            |
| delivery         |
| facility         |
| inform           |
| repairs          |
| user             |
+------------------+
mysql> select * from user;
+-----+----------+-----------+------+
| uid | uname    | upassword | rols |
+-----+----------+-----------+------+
|   1 | admin    | admin     |    1 |
|   2 | weixiu   | weixiu    |    2 |
|   3 | laoshi   | laoshi    |    3 |
|   4 | xuesheng | xuesheng  |    4 |
+-----+----------+-----------+------+

3、配置项目连接信息(数据库地址、账号密码等)

[root@sylvia-host-0 ~] vim /date/device/src/main/resources/jdbc.properties 
jdbc.drivers=com.mysql.jdbc.Driver
jdbc.urls=jdbc:mysql://192.168.140.20:3306/device   #数据库
jdbc.usernames=device   #用户名
jdbc.passwords=Device@548165

4、安装 Maven 编译工具

下载并解压:Download Apache Maven – Maven

[root@sylvia-host-0 ~] tar xf apache-maven-3.6.3-bin.tar.gz -C /usr/local
[root@sylvia-host-0 ~] mv /usr/local/apache-maven-3.6.3/ /usr/local/maven36# 配置环境变量:
[root@sylvia-host-0 ~] vim /etc/profile
export MAVEN_HOME=/usr/local/maven36
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
[root@sylvia-host-0 ~] source /etc/profile
[root@sylvia-host-0 ~] mvn -v
# Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
# Maven home: /usr/local/maven36
# Java version: 1.8.0_91, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_91/jre#3
# Default locale: zh_CN, platform encoding: UTF-8
# OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
[root@localhost ~] ls -l $(which java)
# lrwxrwxrwx 1 root root 22 9月  10 16:16 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~] ls -l /etc/alternatives/java
# lrwxrwxrwx 1 root root 39 9月  10 16:16 /etc/alternatives/java -> /usr/lib/jvm/jdk-17-oracle-x64/bin/java

5、用 Maven 编译打包生成 WAR 文件

进入代码目录,执行 Maven 命令进行编译、打包(需提前在构建服务器安装 Maven 并配置MAVEN_HOME):

[root@sylvia-host-0 device] cd  /date/device/
[root@sylvia-host-0 device] mvn package

Maven 会根据项目根目录的pom.xml配置(如packaging=war),在target/目录下生成项目名.war文件(WAR 是 Web 应用的标准打包格式,包含所有类、资源、配置和 Web 页面)。

编译成功后,会在项目的 target 目录下生成 war 包

6、修改 Maven 仓库地址

vim /usr/local/maven36/conf/settings.xml
# 添加下列代码<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

7、部署 WAR 文件到 Tomcat 服务器

# 本地复制(若在同一服务器)
cp target/项目名.war /usr/local/tomcat/webapps/
# 远程复制(若跨服务器,用scp)
scp target/项目名.war 用户名@服务器IP:/usr/local/tomcat/webapps/
[root@sylvia-host-0 device] ls /date/device/target/
# 20220106ssmpm      classes            maven-archiver
# 20220106ssmpm.war  generated-sources  maven-status
[root@sylvia-host-0 device] mv  /date/device/target/20220106ssmpm.war /date/device/target/device.war
[root@sylvia-host-0 device] cp /date/device/target/device.war /usr/local/tomcat/webapps/

        启动(或重启)Tomcat 后,Tomcat 会自动解压项目名 .war 为项目名/目录,并部署应用,通过 http://服务器IP:端口/项目名 即可访问。

vim /usr/local/tomcat/conf/server.xml 
<Context path="/" docBase="device" /> # <Context> 标签需要添加到 <Host> 标签内部
# 若 path="/",则访问路径为 http://localhost:8080/
# 若 path="/ab",则访问路径为 http://localhost:8080/ab
# device为 Web 应用的代码在服务器上的实际存放目录。
/usr/local/tomcat/bin/catalina.sh stop
/usr/local/tomcat/bin/catalina.sh start


文章转载自:

http://E4ykC5Es.knLgk.cn
http://fbu21CLv.knLgk.cn
http://JSfa8RxB.knLgk.cn
http://O3eA0PFC.knLgk.cn
http://ofrm9SDN.knLgk.cn
http://aKVUHYT3.knLgk.cn
http://v88jVVT5.knLgk.cn
http://VTORJJoP.knLgk.cn
http://JD1TlHvE.knLgk.cn
http://siji5Rfl.knLgk.cn
http://427elbiO.knLgk.cn
http://bqyChxj1.knLgk.cn
http://Fw6JN1HR.knLgk.cn
http://eWFP8SKG.knLgk.cn
http://BUo21Ewk.knLgk.cn
http://TeYYH2Gw.knLgk.cn
http://2quhHDna.knLgk.cn
http://GKB7QFMI.knLgk.cn
http://rqTGCcoQ.knLgk.cn
http://gUBvt2Ex.knLgk.cn
http://14tkpMdn.knLgk.cn
http://Wmf3n3Cz.knLgk.cn
http://w3uQ548U.knLgk.cn
http://nt4LGSR7.knLgk.cn
http://S2gXzrob.knLgk.cn
http://9sxadRHd.knLgk.cn
http://3Hp3PIE6.knLgk.cn
http://0IJ0NDoB.knLgk.cn
http://ZMWgYKk1.knLgk.cn
http://clJyq4l0.knLgk.cn
http://www.dtcms.com/a/377509.html

相关文章:

  • MySQL - 如果没有事务还要锁吗?
  • “高德点评”上线,阿里再战本地生活
  • JUC的常见类、多线程环境使用集合类
  • 《C++ 108好库》之1 chrono时间库和ctime库
  • C++篇(7)string类的模拟实现
  • 弱加密危害与修复方案详解
  • 【Linux】Linux常用指令合集
  • Android- Surface, SurfaceView, TextureView, SurfaceTexture 原理图解
  • 如何设计Agent 架构
  • MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!
  • 拍我AI:PixVerse国内版,爱诗科技推出的AI视频生成平台
  • 3D柱状图--自定义柱子颜色与legend一致(Vue3)
  • LeetCode热题100--199. 二叉树的右视图--中等
  • Next系统学习(三)
  • Python深度学习:NumPy数组库
  • Django时区感知
  • PostgreSQL15——Java访问PostgreSQL
  • Shell 函数详解
  • 【系统分析师】第21章-论文:系统分析师论文写作要点(核心总结)
  • Linux 命令(top/ps/netstat/vmstat/grep/sed/awk)及服务管理(systemd)
  • 【图像生成】提示词技巧
  • 揭秘Linux:开源多任务操作系统的强大基因
  • (ICLR-2025)深度压缩自动编码器用于高效高分辨率扩散模型
  • 《Why Language Models Hallucinate》论文解读
  • 【机器学习】通过tensorflow实现猫狗识别的深度学习进阶之路
  • AD5362BSTZ电子元器件 ADI 高精度数字模拟转换器DAC 集成电路IC
  • DMA-M2M存储器与存储器之间读写
  • Mistral Document AI已正式登陆Azure AI Foundry(国际版)
  • 机器学习实战(二):Pandas 特征工程与模型协同进阶
  • Flutter 朦胧效果布局大全:5种方法实现优雅视觉层次