Tomcat07——服务器配置

        Tomcat服务器配置主要集中于tomcat/conf下的catalina.policy、catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml文件。

1. Server.xml

        server.xml是tomcat服务器的核心配置文件,包含了tomcat的Servlet容器(Catalina)的所有配置。

1.1 Server

        Server是server.xml的根元素,用于创建一个server实例,默认使用的实现类是 org.apache.catalina.core.StandardServer。

<Server port="8005" shutdown="SHUTDOWN">
</Server>

port:tomcat监听的关闭服务器的端口

shutdown:关闭服务器的指令字符串

1.2 Server的内嵌子元素

1.2.1 Listener监听

默认配置的5个Listener的含义:

<!-- 用于日志形式输出服务器、操作系统、JVM的版本信息 -->
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<!-- 用于加载(服务器启动)和销毁(服务器停止)APR。如果找不到APR类,则会输出日志,并不影响Tomcat启动 -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

<!-- 用于避免JRE内存泄漏问题 -->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

<!-- 用户加载(服务器启动)和销毁(服务器停止)全局命名服务 -->
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

<!-- 用于在Context停止时重建Executor池中的线程,以避免ThreadLocal相关的内存泄漏 -->
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

1.2.2 GlobalNamingResources全局命名服务

定义了全局命名服务

<GlobalNamingResources>
    <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>

1.2.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">
</Service>

一个Server服务器,可以包含多个Service服务。一个Service服务可以包含多个Connector和一个Engine。

1.3 Service的内嵌标签

1.3.1 Executor

        在默认情况下,Service并未添加共享线程池配置,各个Connector使用的是自己的线程池,启动tomcat服务器,然后打开jdk的jconsole.exe工具,如图:

这个是未配置之前的线程运行情况。

        如果我们想添加一个线程池,可以在<Service>下添加如下配置:

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

属性说明:

属性含义
name线程池名称,用于Connector中指定
namePrefix所创建的每个线程的名称前缀,一个单独的线程名称为namePrefix+threadNmber
maxThreads线程中最大线程数
minSpareThreads活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在
maxIdleTime线程空闲时间,超过该事件之后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒
maxQueueSize

在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要

更改,否则会有请求不会被处理的情况发生。

prestartminSpareThreads启动线程池时是否启动minSpareThreads部分线程,默认值为false,即不启动
threadPriority线程池中线程的优先级,默认值为5,值从1到10
className

线程池实现类,未指定情况下,默认实现类为:org.apache.catalina.core.StandardThreadExecutor。

如果想要使用自定义线程池首先需要实现org.apache.catalina.Executor接口。

将上述配置在server.xml中配置,如图:

重启tomcat,重新打开jconsole.exe,如图:

可以发现,现在线程名都是" catalina-exec- "开头的,也就是说,共享线程已经创建了,只是还没有被使用,那么怎么让这些线程被使用了,这时候,就要使用到Connector了。

1.3.2 Connector

        Connector用于创建链接器实例,默认情况下,server.xml配置了两个链接器,一个支持HTTP协议,一个支持AJP协议,一次大多数情况下,我们并不需要新增链接器配置,只是根据需要对已有的链接器进行优化。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

属性说明:

1. port:端口号,Connector用于创建服务端Socket并进行监听,以等待客户端请求连接,如果该属性设置为0,tomcat将会随机选择一个可用的端口号给当前connector使用。

2. Protocol:当前Connector支持的访问协议。默认为HTTP/1.1,并采用自动切换机制选择一个基于JAVA NIO的链接器或者基于本地APR的链接器(根据本地是否含有tomcat的本地库判定).

注意:如果不希望采用上述自动切换机制,而明确指定协议,可以使用一下值:

(2.1) HTTP协议:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

其中,protocol的值有三个:

org.apache.coyote.http11.Http11NioProtocol(非阻塞式java Nio链接器)

org.apache.coyote.http11.Http11Nio2Protocol(非阻塞式java Nio2链接器)

org.apache.coyote.http11.Http11AprProtocol(APR链接器)

(2.2) AJP 协议:

org.apache.coyote.ajp.AjpNioProtocol(非阻塞式java Nio链接器)

org.apache.coyote.ajp.AjpNio2Protocol(非阻塞式java Nio2链接器)

org.apache.coyote.ajp.AjpAprProtocol(APR链接器)

3. connectionTimeout:connector接收链接后的等待超时时间,单位为毫秒。-1表示超时

4. redirectPort:当前Connector不支持SSL请求,接收到一个请求,并且符合security-constraint约束,需要SSL传输,Catalina自动将请求重定向到指定的端口。

5. executor:指定共享线程池的名称,也可以通过maxThreads、minSpareThreads等属性配置内部线程池

6. URIEncoding:用于指定编码URI的字符编码,tomcat8.x版本默认编码为UTF-8

完整从配置如下:

1.3.3 Engine

        engine作为Servlet引起的顶级元素,可以内嵌Cluster、Listener、Realm、Valve和Host

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

属性说明:

(1)name:用于指定Engine的名称,默认为Catalina,该名称会影响一部分Tomcat的存储路径(如临时文件)

(2)defaultHost:默认使用的虚拟主机名称,当客户端请求指向的主机无效的时候,将交给默认的虚拟主机处理,默认是localhost。也就是说,在Engine标签下可以配置多个Host。

1.3.4 Engine的子标签Host

        Host元素用于配置一个虚拟主机,它支持一下内嵌元素:Alias、Cluster、Listener、Valve、Realm、Context。如果在Engine下配置Realm,那么此配置将在当前Engine下的所有Host中共享。

        同样,如果Host中配置Realm,则在当前Host下的所有Context中共享。Context中的Realm优先级 > Host的Realm优先级 > Engine中Realm的优先级。

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

属性说明:

(1)name:当前Host通用的网络名称,必须DNS服务器上注册的名称一致。Engine中包含的Host必须存在一个名称与Engine的defaultHost设置一致。

(2)AppBase:当前Host的应用基础目录,当前Host上部署的web应用均在该目录下(可以是绝对或者相对路径)。默认为webapps

(3)unpackWARs:设置为true,Host在启动的时候会将appBase目录下的war包解压为目录,设置为false,Host将从war文件直接启动

(4)autoDeploy:控制tomcat是否在运行时定期检测并自动部署新增或变更的web应用。

通过给Host添加别名,我们可以实现同一个Host拥有多个网络名称

配置如下:

<Host name="www.zoudmbean.com"  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" />
    <Alias>www.zoudmbean1.com</Alias>
</Host>

然后在Host中进行域名的映射,这里先不做介绍,接下来会介绍。

1.3.5 在Host标签中配置多个主机与多个域名 

操作步骤如下:

A. 将Host配置复制一份,将给name属性分别加上别名(域名),然后将APPBase分别指向各自的目录

<Host name="www.zoudmbean.com"  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>
      
      <Host name="www.zoudmbean.com"  appBase="webapps1" 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>

B. 复制一份webapps,重命名为webapps1,如图:

C. 为了区分访问的到底是webapps还是webapps1,我们分别将两个目录下的ROOT下的index.jsp的Home改成Home-02与Home-02,如图:

注意:这个Home就是欢迎页上的那个Home,如图:

D. 仅仅这样更改是不行的,原因是,我们在浏览器输入我们配置的域名之后,我们在浏览器地址栏中输入域名www.zoudmbean.com的时候,浏览器要怎么找到我们的这个tomcat服务器了?

当我们在浏览器输入  www.zoudmbean.com  首先会经过本地Host文件,去查找该域名对应的IP,如果这个域名对应的IP不存在,就会去DNS中去查找,如果DNS也找不到,就找不到了,如果DNS中可以找到,就会请求对应的服务器。即访问路径是:

                                     www.zoudmbean.com ——> Host ——> DNS ——> Tomcat 

所以我们可以在Host中进行配置,Host文件位于C:\Windows\System32\drivers\etc下,如图:

配置如图:

E. 启动Tomcat,在浏览器中输入:http://www.zoudmbean.com:8080,如图:

在浏览器中输入:http://www.zoudmbean1.com:8080,如图:

从这里可以看出,咱们可以在一台服务器上配置多个主机,多个主机可以访问不同的应用

1.3.6 通过Host的子标签Context部署应用

         Context用于配置一个Web应用,默认配置如下:

<Context docBase="myApp" path="/myApp">

</Context>

属性描述:

(1)docBase:Web应用目录或者war包的部署路径,可以是绝对路径,可以是相对于Host appBase的相对路径

(2)path:Web应用的Context路径,如果我们Host名称为localhost,则该web应用访问的根路径为:http://lpcalhost:8080/myApp

它支持的内嵌元素:CookieProcessor、Loader、Manager、Realm、Resources、WatchedResource、JarScanner、Valve。

<Host name="www.zoudmBean.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
      	
      	<Context docBase="D:\servlet" path="/myApp"></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>

接下来我们对这个配置做一个模拟实验:

步骤:

A. 在D盘新建一个名为servlet的目录,然后将一个war包放进去,如图:

B. 将该war包解压出来,可以将.war改成.rar解压,也可以直接在tomcat的webapps目录下复制一个解压好的目录如图:

C. 在Host标签下新增一个Context标签,如图:

D. 启动tomcat,并访问,首先根据配置,先访问http://www.zoudmbean.com:8080,然后加上资源路径/myApp,如图:

2. tomcat-users.xml

        该配置文件中,主要配置tomcat的用户,角色等信息,用来控制Tomcat中manager,host-manager的访问权限。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值