【Day 51|52 】Linux-tomcat

发布于:2025-09-12 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、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 规范程度 核心特点
Tomcat Apache 基金会 开源免费 仅支持基础 Web 规范(Servlet、JSP、WebSocket 等),不支持 EJB、JMS 等企业级规范 轻量、资源占用低、部署简单,社区活跃,是 Java Web 开发的基础工具
WebLogic Oracle 商业收费 支持完整 Java EE(Jakarta EE)规范 功能全面,支持高可用集群、分布式事务、安全管理,提供企业级技术支持
WebSphere IBM 商业收费 支持完整 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 status
        01-SSM.iml
        device.sql
        pom.xml
        src/
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