2020-12-25

博客园Logo
首页
新闻
博问
专区
闪存
班级

代码改变世界
搜索
注册
登录
返回主页
DXH’s Blog
瓶颈是对所有人的,既然绕不过去,那就把它做到极致,就成了门槛,成了核心竞争力。
首页 管理随笔 - 68 文章 - 1 评论 - 19
【Tomcat】Tomcat服务器核心配置说明及标签
目录
一,主要标签结构
二,Server标签
标签属性:
子标签:
三,Service 标签
子标签:
四,Executor 标签
属性:
五,Connector标签
属性:
六,Engine标签
属性:
子标签:
七,Host标签
标签属性:
子标签:
启动Tomcat 浏览器输入:http://localhost:8080
我们来做个实验:
八,Context标签
总结:
首先带着疑问

问题一:去哪配置?
核心配置在Tomcat目录下 conf/目录下的server.xml文件中

问题二:怎么配置?

如下

Tomcat 作为服务器的配置,主要是 server.xml ⽂件的配置;
server.xml中包含了 Servlet容器的相关配置,即 Catalina 的配置;
2020-12-24_230624

一,主要标签结构

二,Server标签 标签属性:

port
shutdown
说明Tomcat来监听port端口来执行关闭

 <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html 
    GlobalNamingResources 中定义了全局命名服务
 -->
 <GlobalNamingResources>
 <!-- Editable user database that can also be used by
 UserDatabaseRealm to authenticate users
 -->
 <Resource name="UserDatabase" auth="Container"
     type="org.apache.catalina.UserDatabase"
     description="User database that can be updated and saved"
     factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
     pathname="conf/tomcat-users.xml" />
 </GlobalNamingResources>
 <!-- A "Service" is a collection of one or more "Connectors" that share
     a single "Container" Note: A "Service" is not itself a "Container",
     so you may not define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/service.html
 -->
 <Service name="Catalina">
     ...
 </Service>
子标签:

Listener

VersionLoggerListener(以⽇志形式输出服务器 、操作系统、JVM的版本信息)
AprLifecycleListener (加载(服务器启动) 和 销毁 (服务器停⽌) APR。 如果找不到APR库, 则会输出⽇志, 并不影响 Tomcat启动)
JreMemoryLeakPreventionListener (避免JRE内存泄漏问题)
GlobalResourcesLifecycleListener (加载(服务器启动) 和 销毁(服务器停⽌) 全局命名服务)
ThreadLocalLeakPreventionListener (在Context停⽌时重建 Executor 池中的线程, 以避免ThreadLocal 相关的内存泄漏)
GlobalNamingResources (中定义了全局命名服务)

Service (如下)

以上标签Listener、GlobalNamingResources一般情况下保持默认即可,不需要而外操作,重点在于Service 标签

三,Service 标签



该标签⽤于创建 Service 实例,默认使⽤ org.apache.catalina.core.StandardService。 默认情况下,Tomcat 仅指定了Service 的名称, 值为 “Catalina”。

子标签:

Listener (Listener ⽤于为Service添加⽣命周期监听器)
Executor (⽤于配置Service 共享线程池,给Connector使用)
Connector (⽤于配置Service 包含的链接器)
Engine (⽤于配置Service中链接器对应的Servlet 容器引擎)
四,Executor 标签
用来定义共享线程池的。

image-20201224233733864

默认是被注释掉的,且属性不全。那么该如何使用呢?

默认情况下,Service 并未添加共享线程池配置。 如果我们想添加⼀个线程池, 可以在下添加如下配置:


属性:

name:线程池名称,⽤于 Connector中指定
namePrefix:所创建的每个线程的名称前缀,⼀个单独的线程名称为 namePrefix+threadNumber
maxThreads:池中最⼤线程数
minSpareThreads:活跃线程数,也就是核⼼池线程数,这些线程不会被销毁,会⼀直存在
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位 毫秒
maxQueueSize:在被执⾏前最⼤线程排队数⽬,默认为Int的最⼤值,也就是⼴义的⽆限。除⾮特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发⽣
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为 false,即不启动
threadPriority:线程池中线程优先级,默认值为5,值从1到10
className:线程池实现类,未指定情况下,默认实现类为:
org.apache.catalina.core.StandardThreadExecutor。如果想使⽤⾃定义线程池⾸先需要实现 org.apache.catalina.Executor接⼝
五,Connector标签
Connector 标签⽤于创建链接器实例默认情况下,server.xml配置了两个链接器,⼀个⽀持HTTP协议,⼀个⽀持AJP协议,⼤多数情况下,我们并不需要新增链接器配置,只是根据需要对已有链接器进⾏优化。

属性:

port:端⼝号,Connector ⽤于创建服务端Socket 并进⾏监听, 以等待客户端请求链接。如果该属性设置 为0, Tomcat将会随机选择⼀个可⽤的端⼝号给当前Connector 使⽤
protocol:当前Connector ⽀持的访问协议。 默认为 HTTP/1.1 , 并采⽤⾃动切换机制选择⼀个基于 JAVA NIO 的链接器或者基于本地APR的链接器(根据本地是否含有Tomcat的本地库判定)
connectionTimeOut: Connector接收链接后的等待超时时间, 单位为毫秒。 -1 表示不超时。
redirectPort: 当前Connector 不⽀持SSL请求, 接收到了⼀个请求, 并且也符合security-constraint 约束, 需要SSL传输,Catalina⾃动将请求重定向到指定的端⼝。比如说:如果访问的是8080端口,然后它发现是一个https的请求,那么他就会转发到8443端口,当然也可以直接访问8443端口
executor: 指定共享线程池的名称(就是Executor标签的name属性), 也可以通过maxThreads、minSpareThreads等属性配置内部线程池。
URIEncoding: ⽤于指定编码URI的字符编码, Tomcat8.x版本默认的编码为 UTF-8 , Tomcat7.x版本默认为ISO8859-1
可以使用共享线程池:

<Connector port=“8080”
protocol=“HTTP/1.1”
executor=“commonThreadPool”
maxThreads=“1000”
minSpareThreads=“100”
acceptCount=“1000” //往往和maxThreads保持一致
maxConnections=“1000” //往往和maxThreads保持一致
connectionTimeout=“20000”
compression=“on” //要不要启动gzip压缩
compressionMinSize=“2048” //压缩处理的最小大小,超过此大小才压缩
disableUploadTimeout=“true” //单独的给servlet放宽超时时间
redirectPort=“8443”
URIEncoding=“UTF-8” />
可以看到Connector标签和Executor都有maxThreads和minSpareThreads标签。

每一个Connector都可以自己定义一个线程池,如果每个Connector都自己定义线程池就浪费了。所以为什么不用一个呢?于是就有了Executor标签来定义一个共享线程池。

六,Engine标签
Engine 表示 Servlet 引擎

... 属性:

name:⽤于指定Engine 的名称, 默认为Catalina
defaultHost:默认使⽤的虚拟主机名称, 当客户端请求指向的主机⽆效时, 将交由默认的虚拟主机处理, 默认为localhost
image-20201225005456558

子标签:

Cluster:集群方面的标签
Realm:验证安全的标签
Host:⽤于配置⼀个虚拟主机
七,Host标签



标签属性:

appBase:这个网站的程序存放的位置,可以是绝对路径也可以是相对路径。webapps就是相对路径,在tomcat的根目录下
unpackWARs:默认为true,把war包解压成文件夹
autoDeploy:自动部署,当资源变更时自动部署,类似于热部署
子标签:


当请求来临时,日志存放起来,

存放在directory值的目录
prefix:日志文件前缀
suffix:日志文件后缀
pattern:打印的日志格式
启动Tomcat 浏览器输入:http://localhost:8080

image-20201225011255980

image-20201225011309987


hostname是localhost,appBase是webapps,去webapps文件夹下找应用程序文件夹,没有指定,默认就去ROOT文件夹下:
image-20201225011532363

我们来做个实验:

把host标签复制一份,两个host标签的name分别为www.abc.com,www.def.com。appBase分别为webapps、webapps2
image-20201225012119802
进入Tomcat根目录,把webapps拷贝一份到根目录,命名为webapps2
image-20201225012241881
为了方便区分,把webapps2/ROOT/index.jsp 中的Home改为Home-webapps2
image-20201225012344132
重新启动Tomcat
配置hosts文件
image-20201225012858171
访问浏览器http://localhost:8080、 http://www.abc.com和http😕/www.def.com
可以看到:
image-20201225013221920
可以看到localhost:8080访问不到了,因为这个虚拟主机被我们修改了

而abc和def均可以找到。同时def.com的Home也被修改为Home-webapps2了。

八,Context标签
用于配置一个Web应用——一个虚拟主机下可以配置多个应用



刚才我们访问的是http://www.abc.com:8080,那么现在我想输入http://www.abc.com:8080/dengxh,dengxh所代表的位置是我的磁盘上的某个文件夹,这个文件夹里放的我的程序资源。如何做?

为了方便演示,我们就拿ROOT中的程序做例子,把webapps中的ROOT文件夹复制到E盘根目录,取名为dengxhh

在Host标签中,增加

重启Tomcat,访问www.abc.com/dengxh/ ,成功跳转了。
image-20201225014648017

如此操作就可以在一个虚拟主机中,配置多个应用,只需要在host标签中配置多个Context标签,区分的时候只需要在虚拟主机后跟上Context的path属性的值即可找到对应的资源。
例如:Host name=“www.abc.com” ,Context path =“dengxh” ,那么浏览器中输入 www.abc.com/dengxh即可。

总结:
image-20201225021451534
image-20201225021557645

思维导图在线观看地址:https://www.processon.com/view/link/5fe4da565653bb054783ca6e

分类: Java
标签: tomcat
好文要顶 关注我 收藏该文
邓晓晖
关注 - 3
粉丝 - 11
+加关注
0 0
« 上一篇: 【Tomcat】Tomcat原理与系统架构
posted @ 2020-12-25 02:19 邓晓晖 阅读(26) 评论(1) 编辑 收藏

评论列表
#1楼 2020-12-25 06:23 成瀬順
123
支持(0) 反对(0)
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
写给园友们的一封求助信
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】博客园x丝芙兰-圣诞特别活动:圣诞选礼,美力送递
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【福利】AWS携手博客园为开发者送免费套餐+50元京东E卡
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· Tomcat
· tomcat
· tomcat
· tomcat
· Tomcatserver.xml
» 更多推荐…

最新 IT 新闻:
· 游族CEO林奇被搭档投毒,三体宇宙会崩塌吗?
· 被在线教育公司盯上的“SA圈”:陪你学习,还是卖货给你?
· 出货量破亿!联发科第一次登顶智能手机SoC
· AirPods Max音质有短板!这是硬伤
· Office Word又添新功能“微软编辑器”:检查并修正语法错误
» 更多新闻…
< 2020年12月 >
日 一 二 三 四 五 六
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
搜索

找找看
最新随笔

1.【Tomcat】Tomcat服务器核心配置说明及标签
2.【Tomcat】Tomcat原理与系统架构
3.SpringBoot执行原理
4.自定义SpringBoot的Starter
5.SpringMVC源码分析
6.手写mini版MVC框架
7.SpringIOC循环依赖
8.SpringIOC的高级特性
9.SpringIOC基础知识总结
10.Mybatis执行SQL的流程
我的标签

SpringBoot(19)
SpringCloud(8)
Mybatis(8)
spring(5)
Nginx(2)
tomcat(2)
算法(1)
Git(1)
MySQL(1)
随笔分类 (48)

Java(44)
MySql(1)
Nginx(2)
算法(1)
随笔档案 (68)

2020年12月(7)
2020年11月(10)
2020年8月(26)
2018年9月(2)
2018年3月(1)
2018年2月(2)
2017年10月(1)
2017年7月(3)
2017年5月(5)
2016年9月(1)
2016年7月(1)
2016年6月(2)
2016年5月(1)
2014年4月(1)
2014年3月(3)
更多
链接

GitHub
最新评论

  1. Re:【Tomcat】Tomcat服务器核心配置说明及标签
    123
    –成瀬順
  2. Re:SpringMVC源码分析
    @nothings0o 不错,Spring这一块还有很多东西需要补充。…
    –邓晓晖
  3. Re:SpringMVC源码分析
    前面写的还不错,后面直接丢出源码和注释,建议结合实际说一下
    –nothings0o
  4. Re:手写mini版MVC框架
    @十一月的雨 凌晨把代码上传到了Github,上传完后总感觉少点什么东西。 原来如此~~~ 已补充…
    –邓晓晖
  5. Re:手写mini版MVC框架
    洋洋洒洒写了折磨多,拉到最后没有git link, 就好像带球过人,各种假动作,漂亮无比,最后没有临门一脚。
    –十一月的雨
    Copyright © 2020 邓晓晖
    Powered by .NET 5.0.1-servicing.20575.16 on Kubernetes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值