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:可选;一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
