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

Tomcat 配置:一文掌握所有要点

引言

Apache Tomcat 是一个流行的开源 Java Servlet 容器和 Web 服务器,广泛用于开发和部署 Java Web 应用程序。正确配置 Tomcat 是确保其性能、安全性和稳定性的关键。本文将详细介绍 Tomcat 的各项配置,帮助您优化和管理 Tomcat 服务器。

一、Tomcat 的目录结构

在开始配置 Tomcat 之前,了解其目录结构非常重要:

  • /bin:包含启动和停止 Tomcat 的脚本。
  • /conf:配置文件目录,存放 Tomcat 的各种配置文件。
  • /lib:存放 Tomcat 运行所需的库文件。
  • /logs:存放日志文件。
  • /webapps:默认的 Web 应用部署目录。
  • /work:存放编译后的 JSP 和 Servlet 文件。
  • /temp:存放临时文件。

二、关键配置文件详解

1. server.xml

server.xml 是 Tomcat 的核心配置文件,定义了服务器的基本架构,包括端口号、连接器、虚拟主机等。

Server 元素

<Server port="8005" shutdown="SHUTDOWN"><!-- 定义服务 -->
</Server>
  • port:监听关闭请求的端口号。
  • shutdown:发送关闭命令时使用的字符串。

Service 元素

<Service name="Catalina"><!-- 定义连接器和引擎 -->
</Service>
  • name:服务的名称。

Connector 元素

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
  • port:监听请求的端口号。
  • protocol:使用的协议。
  • connectionTimeout:连接超时时间(毫秒)。
  • redirectPort:当需要 SSL 时重定向的端口。

Engine 元素

<Engine name="Catalina" defaultHost="localhost"><!-- 定义虚拟主机 -->
</Engine>
  • name:引擎的名称。
  • defaultHost:默认的虚拟主机名。

Host 元素

<Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- 定义上下文 -->
</Host>
  • name:虚拟主机的名称。
  • appBase:Web 应用的基础目录。
  • unpackWARs:是否自动解压 WAR 文件。
  • autoDeploy:是否自动部署新的应用。

2. web.xml

web.xml 是全局 Web 应用配置文件,定义了 Servlet、过滤器和监听器等。

Servlet 配置

<servlet><servlet-name>example</servlet-name><servlet-class>com.example.ExampleServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>example</servlet-name><url-pattern>/example</url-pattern>
</servlet-mapping>
  • servlet-name:Servlet 的名称。
  • servlet-class:Servlet 类的全限定名。
  • url-pattern:映射的 URL 模式。

过滤器配置

<filter><filter-name>exampleFilter</filter-name><filter-class>com.example.ExampleFilter</filter-class>
</filter>
<filter-mapping><filter-name>exampleFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
  • filter-name:过滤器的名称。
  • filter-class:过滤器类的全限定名。
  • url-pattern:映射的 URL 模式。

监听器配置

<listener><listener-class>com.example.ExampleListener</listener-class>
</listener>
  • listener-class:监听器类的全限定名。

3. context.xml

context.xml 是每个 Web 应用的上下文配置文件。

<Context path="/example" docBase="example" reloadable="true"><!-- 其他配置 -->
</Context>
  • path:上下文路径。
  • docBase:Web 应用的基础目录。
  • reloadable:是否自动重新加载。

三、SSL/TLS 配置

为了增强安全性,可以配置 SSL/TLS:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"><SSLHostConfig><Certificate certificateKeystoreFile="conf/localhost-rsa.jks"type="RSA" /></SSLHostConfig>
</Connector>
  • SSLEnabled:启用 SSL。
  • certificateKeystoreFile:证书文件路径。
  • type:证书类型。

四、性能优化

1. JVM 参数调整

在 setenv.sh 或 setenv.bat 中配置:

export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
-Xms:初始堆内存大小。
-Xmx:最大堆内存大小。
-XX:MaxPermSize:永久代大小。

2. 线程池配置

在 server.xml 中配置:

<Connector port="8080" protocol="HTTP/1.1"maxThreads="200" minSpareThreads="25" maxSpareThreads="75"connectionTimeout="20000" />
  • maxThreads:最大线程数。
  • minSpareThreads:最小空闲线程数。
  • maxSpareThreads:最大空闲线程数。

3. 启用 GZIP 压缩

在 server.xml 中配置:

<Connector port="8080" protocol="HTTP/1.1"compression="on" compressionMinSize="2048"noCompressionUserAgents="gozilla, traviata"compressableMimeType="text/html,text/xml,text/plain,text/css,application/json" />
  • compression:启用压缩。
  • compressionMinSize:最小压缩大小。
  • compressableMimeType:可压缩的 MIME 类型。

五、安全配置

1. 禁用不必要的 HTTP 方法

在 web.xml 中配置:

<security-constraint><web-resource-collection><web-resource-name>Restricted Methods</web-resource-name><url-pattern>/*</url-pattern><http-method-omission>TRACE</http-method-omission><http-method-omission>OPTIONS</http-method-omission></web-resource-collection>
</security-constraint>

2. 配置用户和角色

在 tomcat-users.xml 中配置:

<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>

总结

通过合理配置 Tomcat,可以显著提升 Web 应用的性能和安全性。本文详细介绍了 Tomcat 的目录结构、核心配置文件、SSL/TLS 配置、性能优化和安全配置。希望这些内容能帮助您更好地管理和优化 Tomcat 服务器。

相关文章:

Tomcat 配置:一文掌握所有要点

引言 Apache Tomcat 是一个流行的开源 Java Servlet 容器和 Web 服务器&#xff0c;广泛用于开发和部署 Java Web 应用程序。正确配置 Tomcat 是确保其性能、安全性和稳定性的关键。本文将详细介绍 Tomcat 的各项配置&#xff0c;帮助您优化和管理 Tomcat 服务器。 一、Tomca…...

git 大文件上传失败 Please remove the file from history and try again.

根据提示执行命令 --- 查找到当前文件 git rev-list --objects --all | grep b24e74b34e7d482e2bc687e017c8ab28cd1d24b6git filter-branch --tree-filter rm -f 文件名 --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force...

骑砍2霸主MOD开发(14)-进击的巨人

一.巨人 sbyte boneIndex Skeleton.GetBoneIndexFromName(Mission.MainAgent.AgentVisuals.GetSkeleton().GetName(), "r_hand"); cp Mission.MainAgent.AgentVisuals.AddPrefabToAgentVisualBoneByRealBoneIndex("p_sword_a", boneIndex); float agent…...

Android 可拖拽的View,限制在父布局中随意拖拽;拖拽结束后可左右吸边;

实现方法一&#xff1a;自定义View 可随意拖动拖拽的View&#xff0c;限制拖动范围是父布局中&#xff1b; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.ViewGroup; …...

逐步更新动画混合参数(Blend)使其平滑地过渡到目标值

1.具体实现 逐步更新一个动画混合参数&#xff08;Blend&#xff09;&#xff0c;使其平滑地过渡到目标值&#xff0c;可以实现角色动作的平滑过渡&#xff0c;比如从走路过渡到跑步。 private float currentBleng;private float targetBlend;public float accelerSpeed 5;//…...

【多模态/CV】图像数据增强数据分析和处理

note 多模态大模型训练前&#xff0c;图片数据处理的常见操作&#xff1a;分辨率调整、网格畸变、水平翻转、分辨率调整、随机crop、换颜色、多张图片拼接、相似图片检测并去重等 一、分辨率调整 from PIL import Image def resize_image(original_image_path, save_image_p…...

代码随想录——修建二叉搜素树(Leetcode669)

题目链接 递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …...

EasyExcel导出多个sheet封装

导出多个sheet 在需求中&#xff0c;会有需要导出多种sheet的情况&#xff0c;那么这里使用easyexcel进行整合 步骤 1、导入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><d…...

【Python错误】:AttributeError: ‘generator‘ object has no attribute ‘next‘解决办法

【Python错误】&#xff1a;AttributeError: ‘generator’ object has no attribute next’解决办法 在Python中&#xff0c;生成器是一种使用yield语句的特殊迭代器&#xff0c;它允许你在函数中产生一个值序列&#xff0c;而无需一次性创建并返回整个列表。然而&#xff0c;…...

如何配置Feign以实现服务调试

1、引入依赖 在项目中&#xff0c;需要引入Spring Cloud OpenFeign的依赖。这通常是通过在pom.xml文件中添加相应的Maven依赖来完成的。例如&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…...

pc之间的相互通信详解

如图&#xff0c;实现两台pc之间的相互通信 1.pc1和pc2之间如何进行通讯。 2.pc有mac和ip&#xff0c;首先pc1需要向sw1发送广播&#xff0c;sw1查询mac地址表&#xff0c;向router发送广播&#xff0c;router不接受广播&#xff0c;router的每个接口都有ip和mac&#xff0c;…...

Mongodb中字段的删除

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第61篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。 本篇文章&#xff0c;探讨UPDATE中的操作符$unset。Mongodb数据插入后&#xff0c;开发人员使用$u…...

TP8 PHP 动态变量调用 (new $class())->$action($data)

动态&#xff1a; $class \app\table\model\Log; $action DataSave; $data [...]; // 假设这是你要保存的数据//class_exists和method_exists的检查&#xff0c;这段代码能够在尝试实例化类或调用方法之前&#xff0c;先验证类是否存在以及该类中是否存在指定的方法。如果类…...

理解JVM内存模型与Java内存模型(JMM)

理解JVM内存模型与Java内存模型&#xff08;JMM&#xff09; 在Java程序的运行过程中&#xff0c;内存管理和线程的同步是两个重要的概念。本文将深入探讨JVM内存模型&#xff08;Java Virtual Machine Memory Model&#xff09;和JMM&#xff08;Java Memory Model&#xff0…...

鸿蒙OS初识

学习官网&#xff1a;https://www.harmonyos.com/cn/develop 准备 注册&#xff0c;安装软件&#xff08;node:12, DevEco Studio&#xff09;&#xff1a; https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415#ZH-CN_TOP…...

发布自己的 npm 插件包:步骤与最佳实践

在 Node.js 的生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是一个不可或缺的组成部分。npm 允许开发者创建、共享和使用各种库和插件。如果你有自己的 Node.js 插件或库&#xff0c;并且希望与全世界的其他开发者共享&#xff0c;那么发布到 npm 是…...

BubbleML: A Multiphase Multiphysics Dataset and Benchmarks for Machine Learning

我们使用以下六个分类标准: 研究方法: 这个标准根据如何收集和分析数据来区分研究方法。 实验研究,如参考文献[64]中的研究,涉及在受控环境中研究人员操纵变量并观察结果的物理实验。这种方法对于收集真实世界的数据很有价值,但可能成本高且耗时。模拟研究利用计算模型来模…...

vscode+latex设置跳转快捷键

安装参考 https://blog.csdn.net/Hacker_MAI/article/details/130334821 设置默认recipe ctrl P 打开设置&#xff0c;搜索recipe 也可以点这里看看有哪些配置 2 设置跳转快捷键...

PHP序列化、反序列化

目录 一、PHP序列化&#xff1a;serialize() 1.对象序列化 2.pop链序列化 3.数组序列化 二、反序列化&#xff1a;unserialize() 三、魔术方法 ​四、NSSCTF相关简单题目 1.[SWPUCTF 2021 新生赛]ez_unserialize 2.[SWPUCTF 2021 新生赛]no_wakeup 学习参考&#xff1…...

websocket链接携带参数

前端创建链接时官方提供的构造函数 var aWebSocket new WebSocket(url, [protocols]); url&#xff1a;要连接的URL&#xff1b;这应该是WebSocket服务器将响应的URL。 protocols&#xff1a;可选&#xff1b;一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...