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 服务器,广泛用于开发和部署 Java Web 应用程序。正确配置 Tomcat 是确保其性能、安全性和稳定性的关键。本文将详细介绍 Tomcat 的各项配置,帮助您优化和管理 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,限制在父布局中随意拖拽;拖拽结束后可左右吸边;
实现方法一:自定义View 可随意拖动拖拽的View,限制拖动范围是父布局中; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.ViewGroup; …...
逐步更新动画混合参数(Blend)使其平滑地过渡到目标值
1.具体实现 逐步更新一个动画混合参数(Blend),使其平滑地过渡到目标值,可以实现角色动作的平滑过渡,比如从走路过渡到跑步。 private float currentBleng;private float targetBlend;public float accelerSpeed 5;//…...
【多模态/CV】图像数据增强数据分析和处理
note 多模态大模型训练前,图片数据处理的常见操作:分辨率调整、网格畸变、水平翻转、分辨率调整、随机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 在需求中,会有需要导出多种sheet的情况,那么这里使用easyexcel进行整合 步骤 1、导入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><d…...
【Python错误】:AttributeError: ‘generator‘ object has no attribute ‘next‘解决办法
【Python错误】:AttributeError: ‘generator’ object has no attribute next’解决办法 在Python中,生成器是一种使用yield语句的特殊迭代器,它允许你在函数中产生一个值序列,而无需一次性创建并返回整个列表。然而,…...
如何配置Feign以实现服务调试
1、引入依赖 在项目中,需要引入Spring Cloud OpenFeign的依赖。这通常是通过在pom.xml文件中添加相应的Maven依赖来完成的。例如: <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…...
pc之间的相互通信详解
如图,实现两台pc之间的相互通信 1.pc1和pc2之间如何进行通讯。 2.pc有mac和ip,首先pc1需要向sw1发送广播,sw1查询mac地址表,向router发送广播,router不接受广播,router的每个接口都有ip和mac,…...
Mongodb中字段的删除
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第61篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。 本篇文章,探讨UPDATE中的操作符$unset。Mongodb数据插入后,开发人员使用$u…...
TP8 PHP 动态变量调用 (new $class())->$action($data)
动态: $class \app\table\model\Log; $action DataSave; $data [...]; // 假设这是你要保存的数据//class_exists和method_exists的检查,这段代码能够在尝试实例化类或调用方法之前,先验证类是否存在以及该类中是否存在指定的方法。如果类…...
理解JVM内存模型与Java内存模型(JMM)
理解JVM内存模型与Java内存模型(JMM) 在Java程序的运行过程中,内存管理和线程的同步是两个重要的概念。本文将深入探讨JVM内存模型(Java Virtual Machine Memory Model)和JMM(Java Memory Model࿰…...
鸿蒙OS初识
学习官网:https://www.harmonyos.com/cn/develop 准备 注册,安装软件(node:12, DevEco Studio): https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415#ZH-CN_TOP…...
发布自己的 npm 插件包:步骤与最佳实践
在 Node.js 的生态系统中,npm(Node Package Manager)是一个不可或缺的组成部分。npm 允许开发者创建、共享和使用各种库和插件。如果你有自己的 Node.js 插件或库,并且希望与全世界的其他开发者共享,那么发布到 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 打开设置,搜索recipe 也可以点这里看看有哪些配置 2 设置跳转快捷键...
PHP序列化、反序列化
目录 一、PHP序列化:serialize() 1.对象序列化 2.pop链序列化 3.数组序列化 二、反序列化:unserialize() 三、魔术方法 四、NSSCTF相关简单题目 1.[SWPUCTF 2021 新生赛]ez_unserialize 2.[SWPUCTF 2021 新生赛]no_wakeup 学习参考࿱…...
websocket链接携带参数
前端创建链接时官方提供的构造函数 var aWebSocket new WebSocket(url, [protocols]); url:要连接的URL;这应该是WebSocket服务器将响应的URL。 protocols:可选;一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
