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

Tomcat 安装

一、Tomcat 下载

官网:Apache Tomcat® - Welcome!

 

1.1.下载安装包

下载安装包:

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz

安装 javajdk。

yum install java-1.8.0-openjdk.x86_64 -y

/etc/alternatives/jre_openjdk/ 是 OpenJDK JRE 的符号链接管理目录,通过 update-alternatives 实现版本切换。其内容指向实际安装的 JRE 路径,便于系统统一管理 Java 环境。

/etc/alternatives/jre_openjdk/ 目录作用

  • alternatives 系统:Linux 系统通过 update-alternatives 工具管理多个可替换的软件版本,例如 Java、Python 等。

  • JRE 指向:jre_openjdk 条目指向当前系统默认的 OpenJDK JRE(Java Runtime Environment)。

  • 符号链接管理:该目录下的文件实际是符号链接,指向具体的 JRE 安装路径。

/etc/alternatives/jre_openjdk/
├── bin/                # 符号链接到JRE的二进制目录(如java、javac等)
├── include/            # 符号链接到JRE的头文件
├── lib/                # 符号链接到JRE的核心库(rt.jar等)
├── man/                # 符号链接到JRE的手册页
└── ...其他资源文件...

 

1.2.解压

因为 tomcat 直接可用,所以直接解压到相应的目录。

tar xzf apache-tomcat-9.0.102.tar.gz -C /usr/local

 

1.3.启动

进入目录,创建软连接,便于操作,启动服务。

cd /usr/local/
ln -s apache-tomcat-9.0.102 tomcat  # 创建软连接
cd /usr/local/tomcat/bin/           # 进入二进制目录
bash startup.sh                     # 运行启动脚本,启动服务

浏览器可访问到 Tomcat,安装成功。

 

 


 

二、配置 Tomcat 启动脚本

在 /usr/local/tomcat/conf/tomcat.conf 文件中设置 JAVA_HOME=/etc/alternatives/jre_openjdk/,其作用和背后的原因主要有以下几点:

作用

  • 指定 Java 运行环境路径:JAVA_HOME 是一个环境变量,Tomcat 作为 Java 应用服务器,需要知道 Java 运行时环境(JRE)或者 Java 开发工具包(JDK)的安装路径。通过设置 JAVA_HOME,Tomcat 可以找到 Java 解释器(java 命令)以及相关的类库,从而能够正常启动和运行基于 Java 编写的 Web 应用程序。

  • 确保一致性:当在系统中存在多个 Java 版本时,明确指定 JAVA_HOME 可以确保 Tomcat 始终使用预期的 Java 版本来运行,避免因默认 Java 版本的改变而导致的兼容性问题或运行错误。

选择 /etc/alternatives/jre_openjdk/ 路径的原因

  • 系统级 Java 版本管理:在许多 Linux 系统中,/etc/alternatives 目录是 update-alternatives 工具的一部分,这个工具用于管理系统中可替换的软件版本。/etc/alternatives/jre_openjdk/ 通常是一个符号链接,它指向系统当前默认的 OpenJDK JRE 安装目录。通过使用这个符号链接,即使系统中 Java 版本发生了更新或切换,/etc/alternatives/jre_openjdk/ 会自动更新到新的默认 Java 版本路径,从而保证 Tomcat 能够使用最新的默认 Java 环境,而无需手动修改 JAVA_HOME 的值。

  • 灵活性和兼容性:使用 /etc/alternatives/jre_openjdk/ 路径可以让系统管理员方便地在不同的 Java 版本之间进行切换,而不会影响 Tomcat 的配置。例如,如果需要将系统的 Java 版本从 OpenJDK 11 升级到 OpenJDK 17,只需要使用 update-alternatives 工具更新默认的 Java 版本,/etc/alternatives/jre_openjdk/ 会自动指向新的 Java 安装目录,Tomcat 可以继续正常运行。

vim /usr/local/tomcat/conf/tomcat.conf    # 创建文件写入以下内容
​
JAVA_HOME=/etc/alternatives/jre_openjdk/

 

2.1.封装 Tomcat 启动和停止操作

作用

  1. 封装 Tomcat 启动和停止操作

  • /usr/bin/tomcat 文件实际上是一个简单的 shell 脚本,它的主要作用是将 Tomcat 的启动和停止操作进行封装。脚本中使用了 case 语句来根据用户传入的第一个参数(即 $1)来决定执行相应的操作:

    • 当传入的参数是 start 时,脚本会执行 /usr/local/tomcat/bin/startup.sh,这是 Tomcat 自带的启动脚本,用于启动 Tomcat 服务器。

    • 当传入的参数是 stop 时,脚本会执行 /usr/local/tomcat/bin/shutdown.sh,这是 Tomcat 自带的停止脚本,用于停止 Tomcat 服务器。

  1. 提供统一的操作接口

  • 通过这个脚本,用户可以使用更简洁、统一的命令来启动和停止 Tomcat。例如,用户可以直接在命令行中输入 tomcat start 来启动 Tomcat,输入 tomcat stop 来停止 Tomcat,而不需要每次都记住并输入完整的 startup.sh 或 shutdown.sh 脚本路径。

为什么要提前编辑此文件

  • 1. 方便 systemd 服务管理

    • 在编写 systemd 服务单元文件 /lib/systemd/system/tomcat.service 时,systemd 服务单元文件需要指定服务的启动和停止命令。如果不提前封装这个脚本,systemd 服务单元文件中需要直接指定 /usr/local/tomcat/bin/startup.sh 和 /usr/local/tomcat/bin/shutdown.sh 作为启动和停止命令,这样会使 systemd 服务单元文件的配置相对复杂。而使用封装好的 /usr/bin/tomcat 脚本,systemd 服务单元文件可以更简洁地指定启动和停止命令。

  • 2. 便于后续维护和扩展

    • 如果后续需要对 Tomcat 的启动或停止操作进行修改,例如在启动前添加一些环境变量的设置,或者在停止后进行一些清理工作,只需要修改 /usr/bin/tomcat 脚本即可,而不需要修改 systemd 服务单元文件。这样可以提高代码的可维护性和可扩展性。

  • 3. 符合脚本封装和模块化的思想

    • 将相关的操作封装到一个脚本中,符合编程中模块化和封装的思想,使代码结构更加清晰,易于管理。同时,也方便在不同的场景下复用这个脚本,例如在自动化部署脚本中使用。

vim /usr/bin/tomcat
​
#!/bin/bash
case $1 instart)/usr/local/tomcat/bin/startup.sh;;stop)/usr/local/tomcat/bin/shutdown.sh
esac

给脚本设置可执行权限。

chmod +x /usr/bin/tomcat 

 

2.2.编写系统服务脚本

编写系统服务脚本。

vim /lib/systemd/system/tomcat.service
​
[Unit]
Description=Tomcat
After=syslog.target network.target
​
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/bin/tomcat start
ExecStop=/usr/bin/tomcat stop
PrivateTmp=true
User=tomcat
Group=tomcat
​
[Install]
WantedBy=multi-user.target

创建系统用户。

useradd -s /sbin/nologin -M tomcat

修改目录文件权限。

chown -R tomcat.tomcat /usr/local/tomcat/

重新加载 systemd 服务管理器配置。

systemctl daemon-reload

 


 

三、启动服务

systemctl start tomcat.service

查看服务状态。

浏览器可访问。

相关文章:

Tomcat 安装

一、Tomcat 下载 官网:Apache Tomcat - Welcome! 1.1.下载安装包 下载安装包: wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz 安装 javajdk。 yum install java-1.8.0-openjdk.x86_64 -y /etc/altern…...

贪心算法和遗传算法优劣对比——c#

项目背景:某钢管厂的钢筋原材料为 55米,工作需要需切割 40 米(1段)、11 米(15 段)等 4 种规格 ,现用贪心算法和遗传算法两种算法进行计算: 第一局:{ 40, 1 }, { 11, 15…...

系统开发资源

一、前端篇 1.1 菜鸟CSS教程 1.2 HTML/CSS/JS 在线工具 二、后端篇 三、其他篇 3.1 菜鸟官网 3.2 黑马程序员学习路线 3.3 根据地区获取经纬度...

深度学习 bert与Transformer的区别联系

BERT(Bidirectional Encoder Representations from Transformers)和Transformer都是现代自然语言处理(NLP)中的重要概念,但它们代表不同的层面。理解这两者之间的区别与联系有助于更好地掌握它们在NLP任务中的应用。 …...

unity使用mesh 画图(1)

plane 圆 空心椭圆 椭圆 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class DrawMeshManager {static DrawMeshManager instance;public static DrawMeshManager Instance {get {if (instance ! null){retu…...

SpringMVC响应页面及不同类型的数据,

目录 响应页面 响应数据 文本数据 响应POJO对象 ​编辑 响应生命周期 视图解析器 控制器(Controller)处理完客户端请求后,生成的并返回给客户端的结果就是响应,响应的结果可以是静态页面,数据,HTM…...

地理信息系统(ArcGIS)在水文水资源及水环境中的应用:空间数据管理‌、空间分析功能‌、‌可视化表达‌

随着全球工业化和经济的快速发展,水资源短缺、水污染等问题日益严峻,成为制约可持续发展的重大瓶颈。地理信息系统(GIS)以其强大的空间数据管理和分析能力,在水文水资源及水环境的研究和管理中展现出独特优势。本文将深…...

电路原理(电容 集成电路NE555)

电容 1.特性:充放电,隔直流,通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加,但是多电容串联就不会,只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…...

C++对象的初始化和对象所占资源的清理-----初始化列表

一、初始化列表 C 提供了 初始化列表(initializer list) 语法,可以在 构造函数 中用来初始化类的成员变量。它的主要优势是 提高效率,特别是在初始化 const 或 reference 类型的成员时,以及避免额外的赋值操作。 1.…...

零成本搭建Calibre个人数字图书馆支持EPUB MOBI格式远程直读

文章目录 前言1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网使用kindle访问内网私人书库 前言 嘿,各位书虫们!今天要给大家安利一个超级炫酷的技能——如何在本地Windows电脑上搭建自己的私人云端书库。亚马逊服务停了&#xff…...

Ansible命令行模式常用模块使用案例(二)

在Ansible中,命令行模式(Ad-Hoc 模式)是一种快速执行任务的方式,适合临时任务或简单操作。以下是 Ansible 命令行模式中常用模块的使用案例(第二部分): 1 file模块 功能特性:主要用于…...

12. Pandas :使用pandas读Excel文件的常用方法

一 read_excel 函数 其他参数根据实际需要进行查找。 1.接受一个工作表 在 11 案例用到的 Excel 工作簿中,数据是从第一张工作表的 A1 单元格开始的。但在实际场景中, Excel 文件可能并没有这么规整。所以 panda 提供了一些参数来优化读取过程。 比如 s…...

Pytorch中矩阵乘法使用及案例

六种矩阵乘法 torch中包含许多矩阵乘法,大致可以分为以下几种: *:即a * b 按位相乘,要求a和b的形状必须一致,支持广播操作 torch.matmul():最广泛的矩阵乘法 :与torch.matmul()效果一样&…...

【MySQL】增删改查进阶

目录 一、数据库约束 约束类型 NULL约束:非空约束 UNIQUE:唯一约束 DEFAULT:默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…...

【Linux 指北】常用 Linux 指令汇总

第一章、常用基本指令 # 注意: # #表示管理员 # $表示普通用户 [rootlocalhost Practice]# 说明此处表示管理员01. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件&#xf…...

父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法

提示:父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 ‌‌‌‌‌问题:子组件用that解决watch无…...

stable Diffusion 中的 VAE是什么

在Stable Diffusion中,VAE(Variational Autoencoder,变分自编码器)是一个关键组件,用于生成高质量的图像。它通过将输入图像编码到潜在空间(latent space),并在该空间中进行操作&…...

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题,为保障系统安全,需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4,以规避潜在风险,提升系统整体的安全性和稳定性。 1.1 本…...

图论·拓扑排序

拓扑排序 有向无环图的遍历 检查有向图是否连通/有环 核心操作 统计度数,对于度为0的点作为起始点,添加度为0的点作为遍历 如何验证有环?注意不建议直接模拟,如果出现环这起始点的度一定不为0,肯定会少遍历一些点&…...

Uniapp组件 Textarea 字数统计和限制

Uniapp Textarea 字数统计和限制 在 Uniapp 中,可以通过监听 textarea 的 input 事件来实现字数统计功能。以下是一个简单的示例,展示如何在 textarea 的右下角显示输入的字符数。 示例代码 首先,在模板中定义一个 textarea 元素&#xff…...

一文了解JVM的垃圾回收

Java堆内存结构 java堆内存是垃圾回收器管理的主要区域,也被称为GC堆。 为了方便垃圾回收,堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配,达到一定存活时长后会移入老年代,而永久代存储的是类的元数…...

Vector底层结构和源码分析(JDK1.8)

参考视频:韩顺平Java集合 Vector 类的定义说明: Vector 的底层也是一个对象数组,protected Object[] elementData;Vector 是线程同步的,即线程安全,Vectoe 类的操作方法带有 synchronized 关键字:public sy…...

uni-app+vue3学习随笔

目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内, 非 static 目录下的文件(vue组件、js、css 等)只有被引用时,才会被打包编译。 css、less/scss 等资源不要放在 static 目录下,建议这些…...

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具,但从 2024.02 版本起,JetBrains 调整了试用政策,新用户不再享有默认的 30 天免费试用…...

移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人

在汹涌澎湃的人工智能浪潮中,具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案,为AI机器人强势赋能,助力其实现跨行业拓展,从工业制造到服务接待,再到医疗康养,不断改写各行业…...

嵌入式硬件篇---手柄控制控制麦克纳姆轮子

文章目录 前言1. 变量定义2. 摇杆死区设置3. 模式检查4. 摇杆数据处理4.1 右摇杆垂直值(psx_buf[7])4.2 右摇杆水平值(psx_buf[8])4.3 左摇杆水平值(psx_buf[5])4.4 左摇杆垂直值(psx_buf[6]&am…...

XML Schema 实例

XML Schema 实例 引言 XML(可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言。XML Schema 是一种用于定义 XML 文档结构的机制,它定义了 XML 文档中允许的数据类型、元素和属性。本文将详细探讨 XML Schema 实例,包括其基本概念、结构、用途以及实例分析。…...

Datax-web部署文档(超详细)

Datax-web部署文档(超详细) Datax部署 # 参考官方文档 https://github.com/alibaba/DataX/blob/master/userGuid.md# 下载datax已经封装好的文件,不推荐源码自己编译 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.…...

基于javaweb的SSM敬老院养老院管理系统(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

专题地图的立体表达-基于QGIS和PPT的“千层饼”视图制作实践

目录 前言 一、QGIS准备基础数据 1、QGIS 相关插件 2、图层标绘操作 二、PPT中制作 1、调整图片的规格 2、设置旋转 3、添加文字 三、总结 前言 在信息爆炸的时代,数据的可视化呈现变得愈发关键,而专题地图作为传递地理空间信息的有力工具&#…...

DeepSeek-R1 论文阅读总结

1. QA问答(我的笔记) Q1: DeepSeek如何处理可读性问题? 通过构建冷启动数据(数千条长CoT数据)微调基础模型,结合多阶段训练流程(RL训练、拒绝采样生成SFT数据),并优化输…...

如何选择适合您智能家居解决方案的通信协议?

如何选择适合您智能家居解决方案的通信协议? 在开发智能家居产品时,选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多,了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…...

蓝桥杯备考:set容器用法(lower_bound)---营业额统计

如图所示,这道题的暴力解法就是枚举每天的营业额,让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方,我们是很有可能超时的 所以我们选择用set容器的二分查找功能 我们每次遍历到一个数的时候,前…...

vue3 动态添加路由并生成左侧菜单栏

先说下思路,登录后跳转到基础页面, 每访问一个页面时,会进到路由守卫的方法 守卫进行身份验证,登录成功后才能跳转到静态路由外的页面,否则就重定向回login页面 登录后跳转到基础页面(因为基础页面包含了左…...

上下文微调(Contextual Fine-Tuning, CFT)提高大型语言模型(LLMs)在特定领域的学习和推理能力

大型语言模型(LLMs)在开放领域任务中表现出色,但在快速演变的专业领域(如医学、金融)中面临挑战: 知识更新难题:传统指令微调(Instruction Fine-Tuning, IFT)依赖显式指令,难以适应动态知识。灾难性遗忘:持续预训练(Continued Pretraining, CPT)可能导致模型遗忘已…...

L2-4 吉利矩阵

输入样例: 7 3输出样例: 666 这道题是暴力纯搜,但是很难想,我这个是看的别人的代码 #include "bits/stdc.h" using namespace std; int x[20][20]; int l, n; int cnt 0; int sumx[5], sumy[5]; void dfs(int x, in…...

⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance

Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。 定义 给定两个长度相同的字符串 A A A 和 B B B,它们的汉明距离 D ( A , B ) D(A,B) D(A,B)…...

数据可信、隐私可控:CESS 如何打造波卡生态数据新基建?

原文:https://messari.io/report/cess-network-a-deep-dive-into-programmable-data-value-infrastructure作者:Messari编译:OneBlock波卡生态一直以来以其跨链互操作性和灵活性吸引了众多创新项目,尤其是在 DePIN(去中…...

HCIA-11.以太网链路聚合与交换机堆叠、集群

链路聚合背景 拓扑组网时为了高可用,需要网络的冗余备份。但增加冗余容易后会出现环路,所以我们部署了STP协议来破除环路。 但是,根据实际业务的需要,为网络不停的增加冗余是现实需要的一部分。 那么,为了让网络冗余…...

网络安全之数据加密(DES、AES、RSA、MD5)

刚到公司时,我的工作就是为app端提供相应的接口。之前app使用的是PHP接口,对数据加密方面做得比较少。到使用java接口时,老大开始让我们使用DES加密,进行数据传输,但是后来觉得DES是对称加密,密钥存在客户端…...

Vim忍者速成秘卷:让你的键盘冒出残影の奥义

🎯 核心原理 通过 超低延迟配置 + 肌肉记忆优化 + 视觉欺骗技术,达成行云流水的操作体验。就像《火影忍者》结印般流畅! ⚡ 残影生成术(基础篇) " 🛩️ 贴地飞行模式(.vimrc 极速配置) set timeoutlen=300 " 快捷键响应时间压缩至300ms(武士刀级响应)…...

致远互联FE协作办公平台 存在SQL注入漏洞(DVB-2025-8942)

免责声明 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x01…...

通俗易懂动态表单自定义字段解决方案

动态表单自定义字段解决方案 1. 背景: 有些项目可能会有要求,客户可以自定义设计字段,并且字段还需要在后台设置可展示、可搜索。 2. 场景: 比如说报名场景,我们并不知道客户想让用户填哪些东西。下面我就举个例子&…...

CentOS7离线部署安装Dify

离线部署安装Dify 在安装 Dify 之前,请确保您的机器满足以下最低系统要求: CPU > 2 核 内存 > 4 GiB 1.安装docker和docker compose 启动 Dify 服务器最简单的方式是通过docker compose。因此现在服务器上安装好docker和docker compose&#xf…...

Dify后端结构与二次开发指南(一)

Dify 的后端基于 Python 编写,使用 Flask 作为 Web 框架,SQLAlchemy 作为 ORM(对象关系映射),Celery 作为任务队列,Flask-Login 处理用户认证和授权。以下是对 Dify 后端结构的详细介绍,以及如何…...

vscode arm拓展 keil acm5 到acm6迁移

目录 1. Arm Keil Studio Visual Studio 代码扩展用户指南(only support acm6 project)(能不迁移还是别迁移了,工程量太大啦,会出很多问题的) 1. Arm Keil Studio Visual Studio 代码扩展用户指南&#xff…...

软件工程概述、软件过程模型、逆向工程(高软45)

系列文章目录 软件工程概述、软件过程模型、逆向工程。 文章目录 系列文章目录前言一、软件工程概述二、能力成熟度模型1.能力成熟度模型CMM2.能力成熟度模型集成CMMI 三、软件过程模型1.瀑布模型SDLC2.原型化模型3.螺旋模型4.增量模型5.喷泉模型6.敏捷模型7.统一过程模型RUP 四…...

医药制造行业现状 医药制造行业内检实验室LIMS

在医药制造行业中,质量控制是确保产品安全性和有效性的关键环节。随着科技的进步和监管要求的日益严格,传统的实验室信息管理系统(LIMS)已经难以满足现代医药制造企业对高效、精准管理的需求。面对这一挑战,白码内检实…...

FX-std::list

std::list 是 C 标准库中的一个双向链表容器&#xff0c;定义在 <list> 头文件中。它支持在任意位置高效地插入和删除元素&#xff0c;但不支持随机访问。以下是 std::list 的基本用法和一些常见操作&#xff1a; 1. 包含头文件 #include <list> 2. 定义和初始化…...

配置安全网站

配置网站 确定是Debian系统 更新索引&#xff1a;apt update 安装包&#xff1a;apt upgrade -y 查看nginx状态&#xff1a;systemctl status nginx 安装&#xff1a;nginx&#xff1a;apt install nginx 启动&#xff1a;systemctl start nginx 在/var/www/里面创建一个…...