Tomcat-2-Tomcat 服务器核心配置详解

Tomcat系列

1-系统架构与原理剖析
2-Tomcat 服务器核心配置详解


前言

核心配置的学习要先明确两个问题:
1、去哪配置?核心配置在tomcat目录下conf文件夹下的server.xml文件中
2、怎么配置?

一、核心配置文件server.xml

1.主要标签结构

<!--Server 根元素,创建一个Server实例,子标签有 Listener、GlobalNamingResources、Service-->
<Server>
	<!--Listener 定义监听器-->
	<Listener/> 
	<!--GlobalNamingResources 定义服务器的全局JNDI资源 --> 
	<GlobalNamingResources/> 
	<!--定义一个Service服务,一个Server标签可以有多个Service服务实例 -->
	<Service/>
</Server>

2.Server标签详解

<!--
port:关闭服务器的监听端口 
shutdown:关闭服务器的指令字符串
-->
<Server port="8005" shutdown="SHUTDOWN">
<!--首先是几个监听器的配置-->
  <!--VersionLoggerListener:以日志的形式输出服务器、操作系统、JVM的版本信息-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!-- APR library loader. Documentation at /docs/apr.html -->
  <!--AprLifecycleListener:加载和小会APR。如果找不到APR库,则会输出日志,并不影响Tomcat启动-->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <!--JreMemoryLeakPreventionListener:避免Jre内存溢出问题-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <!--GlobalResourcesLifecycleListener:加载(服务器启动)和销毁(服务器停止)全局命名服务-->
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <!--ThreadLocalLeakPreventionListener:在Context停止时重建Executor池中的线程,以避免ThreadLocal相关的内存泄漏-->
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- 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>
</Server>

3.Service 标签详解

<!--
该标签用于创建Service实例,默认使用org.apache.catalina.core.StandardService。
默认情况下,Tomcat仅指定了Service的名称,值为 Catalina
Service标签有四个子标签:Listener、Executor、Connector、Engine
大致功能为:
	Listener:用于为Service添加生命周期监听器
	Executor:用于配置Service共享线程池
	Connector:用于配置Service包含的连接器
	Engine:用于配置Service中连接器对应的Servlet容器引擎
-->
<Service name="Catalina">
  <!--
  <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
      maxThreads="150" minSpareThreads="4"/>
  -->

  <Connector port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />
  <!-- A "Connector" using the shared thread pool-->
  <!-- 一个连接器使用共享线程池-->
  <!--
  <Connector executor="tomcatThreadPool"
             port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />
  -->
 
  <!-- You should set jvmRoute to support load-balancing via AJP ie :
  <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
  -->
  <Engine name="Catalina" defaultHost="localhost">

    <Realm className="org.apache.catalina.realm.LockOutRealm">
      <!-- This Realm uses the UserDatabase configured in the global JNDI
           resources under the key "UserDatabase".  Any edits
           that are performed against this UserDatabase are immediately
           available for use by the Realm.  -->
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
    </Realm>

    <Host name="localhost"  appBase="webapps"
          unpackWARs="true" autoDeploy="true">

      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
             prefix="localhost_access_log" suffix=".txt"
             pattern="%h %l %u %t &quot;%r&quot; %s %b" />

    </Host>
  </Engine>
</Service>

3.1 Executor 标签

在这里插入图片描述
我们可以看到:默认情况下,Service并未开启共享线程池的配置。如果我们想要添加一个共享线程池,可以在Service标签下添加一个Executor标签,按照如下配置

<Executor name="commonThreadPool"
    namePrefix="thread-exec-"
    maxThreads="200"
    minSpareThreads="100"
    maxIdleTime="60000"
    maxQueueSize="Integer.MAX_VALUE"
    prestartminSpareThreads="false"
    threadPriority="5"
    className="org.apache.catalina.core.StandardThreadExecutor"/>

属性释义如下
**
name:线程池名称,用于Connector中指定
namePrefix:所创建的每个线程的前缀名称,一个单独的线程命名会是:namePrefix+threadNumber
maxThreads:池中最大线程数
minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位是毫秒
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值(Integer.MAX_VALUE),也就是广义的无限。**除非特殊情况,不然这个值不需要更改,否则会有请求不会被处理的情况发生
**
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动 threadPriority:线程池中线程优先级,默认值为5,值从1到10
className:线程池实现类,未指定情况下,默认实现类org.apache.catalina.core.StandardThreadExecutor。如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口
**

3.2 Connector 标签

Connector标签用于创建连接器实例
默认情况下,server.xml 配置了两个链接器,一个支持HTTP协议,一个支持A JP协议 大多数情况下,我们并不需要新增链接器配置,只是根据需要对已有链接器进行优化
在这里插入图片描述
在这里插入图片描述
默认配置文件中的属性比较少,下面我们在针对全属性的Connector进行一下属性解析

<Connector port="8080"
          protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="8443"
          executor="commonThreadPool"
          URIEncoding="UTF-8"
          maxThreads="1000"
          minSpareThreads="100"
          acceptCount="1000"
          maxConnections="1000"
          compression="on"
          compressionMinSize="2048"
          disableUploadTimeout="true" />

**
port:端口号,Connector用于创建服务端Socket并进行监听,以等待客户端请求连接。如果该属性设置为0的话,Tomcat将会随机选择一个可用的端口给当前的Connector使用
protocol:当前Connector支持的访问协议。默认为HTTP/1.1,并采用自动切换机制选择一个基于JAVA NIO的连接器或者基于本地APR的连接器(必须本地引入了Tomcat的本地APR库)
connectionTimeout:Connector接收连接后的等待超时时间,单位为毫秒。-1表示不超时
redirectPort:如果当前Connector不支持SSL请求,接收到请求并且符合security-constraint 约束, 需要SSL传输,Catalina会自动将请求重定向到指定的端口
executor:指定的线程池名称(可以是共享线程池,也可以是自定义内部线程池,可以通过maxThreads、minSpareThreads 等属性配置内部线程池)
URIEncoding:用于指定编码URI的字符编码,Tomcat8.X版本默认的编码是UTF-8,Tomcat7.x版本默认的是ISO-8859-1编码
acceptCount:接收请求数量,一般和maxThreads保持一致
maxConnections:最大连接数,一般和maxThreads保持一致
compression:是否开启JZip压缩
compressionMinSize:压缩处理的最小大小是多少,即包的大小超过这个配置才进行压缩,单位是k,默认是2048
disableUploadTimeout:是否给一些配置为上传的servlet放宽超时时长,单独配置超时时长
**

3.3 Engine 标签

Engine 表示 Servlet 引擎,一个Service只有一个Engine,但是一个Engine可以有多个Host(虚拟主机)
在这里插入图片描述

<Engine name="Catalina" defaultHost="localhost">
...
</Engine>

Engine的属性
**
name:用于指定Engine 的名称, 默认为Catalina
defaultHost:默认使用的虚拟主机名称,因为一个Engine可以有多个Host, 当客户端请求指向的主机无效或者未指定Host时, 将交由默认的虚拟主机处 理, 默认为localhost
**
Engine的子标签
**
Cluster:集群相关的标签
Realm:关于用户名密码,web应用映射关系,验证安全相关的
Host:虚拟主机(www.abc.com,www.def.com)
**

3.3.1 Host标签

Host 标签用于配置一个虚拟主机

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    ...
</Host>

属性释义:
**
name:虚拟机名称
appBase:应用的基础目录(程序的路径),可以是绝对路径也可以是相对路径
unpackWARs:是否自动解压war包,默认是true
autoDeploy:自动部署
**

子标签
Valve标签:阀,相当于一个处理器
在这里插入图片描述
这里的意思是:这个处理器(阀)配置在这里,AccessLogValve,把访问的请求以日志的形式记录下来,记录在logs文件夹下,日志文件的前缀是localhost_access_log,后缀是.txt

3.3.2 Context标签

Context 标签用于配置一个Web应用,如下:

 
<Host name="www.abc.com"  appBase="webapps" unpackWARs="true"
autoDeploy="true">
<!--
docBase:Web应用目录或者War包的部署路径。可以是绝对路径,也可以是相对于 Host appBase的相对路径。
path:Web应用的Context路径。如果我们Host名为localhost,则该web应用访问的根路径为: http://localhost:8080/test。
-->
	<Context docBase="/Users/lx/test" path="/test"></Context>
    <Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
			prefix="localhost_access_log" suffix=".txt"
			pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

二、测试一下

1.自测一下多个Host:

我们将默认配置的server.xml文件做一些修改
在这里插入图片描述
将默认的Host:localhost复制两份,分别为www.abc.com、www.def.com
这里注意,需要将自己电脑本地的localhost也分别指定到www.abc.com、www.def.com两个host上,不然的话没有宿主(具体操作不同系统不一样,可自行百度)
在这里插入图片描述
在这里插入图片描述

对应的应用基础目录我们这里一个是webapps1,另一个是webapps2,都是我们复制出来的,我们已知Tomcat的启动页面在webapps的root路径下
在这里插入图片描述
所以我们为了能直接的看到这是两个应用,这里将www.abc.com的路径改为webapps1,将www.def.com的路径改为webapps2,并对对应的indes.jsp做一点修改
在这里插入图片描述
在这里插入图片描述
接下来我们从终端进入到bin目录启动Tomcat
在这里插入图片描述
然后分别在浏览器上访问:localhost:8080,www.abc.com:8080,www.def.com:8080,分别可以看到如下的现象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,从页面很明显可以看到我们不同的Host访问使用的是不同的路径,即可以认为访问不同的项目

2.自测一下Context(一个多个都一样):

上面说到Context标签可以用来配置url执行的web应用路径
这里我们刚好用我们上面创建好的两个文件夹来测一下
我们用www.abc.com来测试
直接加好两个Context,如下:
在这里插入图片描述
然后我们重启Tomcat,在加上路径看一下是否符合预期:
在这里插入图片描述
在这里插入图片描述

可以看到两个路径都正确的按照我们指定位置的服务进行了加载

提示下,如果再改完配置文件或者index重启tomcat发现没生效的话可以先不着急,再重启一遍tomcat看一下,别问我为什么,我还不知道咋回事,哈哈

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat 的主要配置文件是 server.xml,它位于 Tomcat 安装目录的 conf 目录下。以下是 server.xml 配置文件的一些常见参数和说明: 1. Server 元素:定义 Tomcat 服务器的全局配置,可包含一个或多个 Service 元素。 - shutdown:用于关闭 Tomcat 服务器的命令字符串。 - port:定义 Tomcat 服务器监听的端口号。 2. Service 元素:定义一个具体的服务,通常包含一个或多个 Connector 元素和一个或多个 Engine 元素。 - name:服务名称。 - connector:定义连接器,用于处理客户端请求。 - engine:定义处理请求的引擎。 3. Connector 元素:定义监听请求的端口和协议。 - port:监听的端口号。 - protocol:使用的协议,如 HTTP/1.1。 4. Engine 元素:定义处理请求的引擎,通常包含一个或多个 Host 元素。 - defaultHost:默认的虚拟主机。 5. Host 元素:定义虚拟主机,可以处理来自客户端的请求。 - name:虚拟主机名称。 - appBase:应用程序部署的基础目录。 6. Context 元素:定义 Web 应用程序的上下文路径、文件位置等信息。 - docBase:Web 应用程序的部署目录。 - path:Web 应用程序的上下文路径。 7. Valve 元素:用于配置各种阀门,如访问日志、身份验证等。 8. Realm 元素:定义身份验证和授权的规则。 这只是 server.xml 配置文件中的一部分常见参数,实际上还有更多的配置选项可以进行调整。请根据具体需求和官方文档进行详细配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值