如何搭建tomcat服务器配置(怎么配置tomcat服务器)
大家好,小编今天为大家分享关于怎么配置tomcat服务器(如何搭建tomcat服务器配置)的信息,很多人还不知道,今天让我们一起来看看吧!
1、一.导言Server.xml配置是Tomcat的启动配置,从配置结构可以看出Tomcat的整体架构。如果能了解它的常用配置项,对Tomcat有一个战略性的把握,然后一步一步深入源代码,分析每个核心功能的实现细节,会事半功倍。1server.xml配置示例
2、如上图server.xml配置,最外层是一个Server,代表Tomcat的运行实例。
3、Server里有一些监听器Listener,一个不知道干啥的GlobalNamingResources,还有一个Service,通过阅读源码,发现一个Server里可以有多个Service。Service可以理解为是对部署在Tomcat里的服务的抽象,一个Tomcat可以部署多个服务,但是我更喜欢把一个Service理解成一个服务 *** 或者集群。Service里有一个Executor、Connector和Engine。
4、Executor是一个线程池,可以供Contector使用;Connector定义了协议连接(HTTP/AJP),外界就是通过Connector访问Service里的服务的;Engine是容器引擎,可以理解它为Servlet容器,真正的业务处理在Engine里。通过阅读源码,一个Service可以有多个Executor,多个Connector,一个Engine。如果把Service比作一个房子,Connector比作门,一个房子可以有多个门就好理解了。
5、Engine内部较复杂,它内部就像俄罗斯套娃,有多个子容器,子容器下又可以有多个子容器。正如Engine的英文含义,引擎,驱动和管理内部子容器。因为是最顶端的管理者,会包含一些组件辅助管理子容器。
6、Engine可以有多个Host容器,可以理解为虚拟主机(URL地址中主机部分抽象);Host容器里有多个Context容器,Context就是一个个Web应用;Context容器里有多个Wrapper容器,server.xml中一般不用配置,Wrapper是对Servlet的包装,就是一个个业务功能了。如果对应上Service房子的比喻,Engine可以比作房子里所有房间的总和,或者是通向每个房间的走道,Host就是一个个房间,房间里有一些家具家电(Context),每一个家具家电有很多功能(Wrapper)。
7、Tomcat运行实例Server如上面的Server.xml配置所示,最外层是一个服务器,它代表Tomcat的运行实例。
8、服务器中有一些监听器、一个不知道做什么的GlobalNamingResources和一个服务。通过阅读源代码,发现一个服务器可以有多个服务。服务可以理解为部署在Tomcat中的服务的抽象。
9、一个Tomcat可以部署多个服务,但是我更愿意将一个服务理解为一个服务集或集群。服务中有执行器、连接器和引擎。Executor是可由Contector使用的线程池;连接器定义协议连接(HTTP/AJP),外界通过连接器访问服务中的服务;引擎是容器引擎,可以理解为Servlet容器,真正的业务处理在引擎里。
10、通过读取源代码,一个服务可以有多个执行器、多个连接器和一个引擎。如果把服务比作房子,把连接器比作门,那么很容易理解一个房子可以有多扇门。发动机内部比较复杂,就像俄罗斯娃娃一样,有多个子容器,子容器下面可以有多个子容器。
11、作为engine的英文意思,Engine驱动和管理内部子容器。因为它是顶层管理器,所以它将包含一些组件来帮助管理子容器。引擎可以有多个主机容器,可以理解为虚拟主机(URL地址中的主机部分是抽象的);主机容器中有多个Context容器,Context是一个Web应用。
12、上下文容器中有多个包装器容器,通常不需要在服务器中配置。xml包装器是Servlet的包装器,Servlet是一种业务功能。如果对应服务房的比喻,可以把发动机比作房子里所有房间的总和,或者说是通向每个房间的走道。
13、主人是一个房间,房间里有一些家具电器(语境),每个家具电器都有很多功能(包装)。Tomcat运行实例服务器它是服务器Tomcat的运行实例的抽象,管理多个内部服务。在Tomcat源代码中,Server的默认标准实现是
14、org.Apache.catalina.core.standardServer:默认有6个生命周期监听器,监听Server不同运行阶段的事件并作出响应。
15、GlobalNamingResources全局命名资源,通过JNDI提供统一的命名对象访问接口。Server监听了一个端口,默认80如果这个端口传来SHUTDOWN指令,则关闭Tomcat。Server还有两个定时任务,监听触发一些在Tomcat整个生命周期里周期性事件,暂时只有自动部署。
16、1生命周期监听器(1)版本日志侦听器
17、org.Apache.catalina.startup.versionloggerlistener监听初始化阶段,输出一些运行日志,如操作系统、JDK、Tomcat版本信息以及catalina.base和catalina.home的定义等。(2)aplifecyclelistenerTomcat可以使用APR本地库解决操作系统层面的异步IO问题,通过JNI调用APR本地库,大大提高静态资源的处理性能。
18、org.Apache.catalina.core.aprlifecyclelistener对初始化前的事件和销毁后的事件感兴趣:在Tomcat初始化之前,AprLifecycleListener试图初始化APR库。
19、如果初始化成功,APR将用于接收和处理客户端的请求。在Tomcat被销毁后,AprLifecycleListener将在4月15日进行一些销毁终止操作。(3)JreMemoryLeakPreventionListener
20、org.Apache.catalina.core.jrememoryleakpreventionlistener在Tomcat初始化时会使用系统类加载器预加载部分JRE类并设置URLConnectioncachedisable属性,以避免线程上下文类加载器为Tomcat定制的Webappclassloader时JRE加载导致的内存泄漏和URLConnectioncache导致的文件锁定问题。
21、(4)GlobalResourcesLifecycleListener
22、org.Apache.catalina.mbean.globalresourceslifecyclelistener将在Tomcat启动时为JNDI创建mbean,并在Tomcat停止时销毁mbean。(5)threadlocaliakpreventionlistener
23、org.Apache.catalina.core.threadlocaleakprovisionlistener在监听器停止监听上下文后,销毁连接器Connector中执行器的所有核心工作线程并重新创建,以避免使用threadlocal导致的内存泄漏。(6)NamingContextListener[/S2/]
24、org.Apache.catalina.core.namingcontextlistenerlistener在Tomcat启动时创建并绑定全局命名资源,并在Tomcat停止前做一些解除绑定全局命名资源、注销、销毁等操作。
25、2全球命名资源GlobalNamingResources是一个全局命名资源,它通过JNDI提供统一的命名对象访问接口。JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一项古老的技术,在历史遗留下来的企业应用中可能还在使用,比如获取一个数据库连接资源、自定义配置等。启动配置文件中的这种强耦合方式不再适用于轻量级应用程序和分布式服务。
26、(后续可以单独研究,这里就知道了)3监控关机命令Tomcat启动时,主线程会在所有启动工作完成后,循环进入等待关机的状态。如果收到SHUTDOWN,调用Tomcat停止销毁接口。实现 *** 很简单。
27、单独为主线设置一个socket连接,并始终监听某个端口(默认为8005)的关机命令。4定时触发自动部署的周期性事件。服务器启动时会启动两个调度任务,一个是每10秒触发一次自动部署事件,这个调度任务可能会因为自动部署检查部署过程中的异常而停止,所以每隔1分钟还有一个调度任务来检查自动部署调度任务是否正常运行,如果不正常就复位。
28、(自动部署是主机的工作,由主机的生命周期监听器Hostconfig监控和执行)服务抽象服务服务的默认标准实现是
29、org.Apache.catalina.core.standardservice。如果在服务器中配置了多个服务,则名称必须唯一且不重复。服务中包含的组件包括执行器、连接器和引擎,还有一个映射器组件没有反映在配置中,一般不需要配置。
30、1共享线程池执行器可以在服务中定义一些线程池,供连接器和其他组件使用。Tomcat并没有从头开始实现自己的线程池,而是基于JUC的ThreadPoolExecutor进行了定制化改造。默认的标准实现是
31、org.Apache.catalina.core.standardthreadexecutor。
32、执行者可配置的项目如下:
33、注意:如果指定执行器的实现是StandardThreadExecutor,那么无论prestartminSpareThreads是真还是假,minSpareThreads核心工作线程都会被提前创建。2连接器连接器连接器是服务的入口。一个服务可以有多个连接器。
34、连接器定义了多种连接协议,配置复杂。现在,只提供了常见的配置说明:
35、注意:在Tomcat0.6中,轮询器线程和接收器线程的数量不再由NioEndpoint配置,默认情况下是一个。同时APREndpoint被标记为不推荐,所以APR的配置就不需要多了解了,后面我们会详细研究Connector的内部实现,然后再解释与源代码相关的其他配置项。
36、3集装箱发动机发动机它是引擎Servlet容器的顶层管理器,负责处理相应服务中的所有请求,包括多个主机和其他组件。默认实现是
37、org.Apache.catalina.core.standardEngine.Engine及其子容器都继承自ContainerBase,有一些类似的组件,如AccessLog、Pipeline、Cluster、Realm、Log、LifecycleListener、ContainerListener等。Engine、Host和Context都有一个带有相同前缀的LifecycleListener,如EngineConfig、HostConfig和ContextConfig,它们分别监视它们感兴趣的生命周期事件。
38、例如,当引擎启动和停止时,EngineConfig会输出一些日志。引擎节点配置有以下选项:
39、注意:Engine即其子容器Host、Context、Wrapper都可以设置backgroundProcessorDelay这个参数,都可以有自己的后台线程来延迟backgroundProcessorDelay时长周期性处理一些事情。如果backgroundProcessorDelay<>
40、上层容器启动停止下层容器时,会用一个线程池来做异步处理。4URI测绘仪中的服务映射器组件主要由连接器和上下文使用。在Connector中处理完连接后,请求信息需要交给相应的主机进行处理,通过Mapper的分析可以找到主机。
41、通过上下文映射器找到相应的Servlet(包装器)来处理业务。Mapper还有一个对应的生命周期监听器MapperListener,主要是在启动后监听容器,在Mapper的关系中注册容器,建立树形结构。容器停止后,进行一些销毁和注销操作。
42、(详细的映射器原理将在后面的单独文章中解释)虚拟主机主机是HostEngine的子容器,默认的标准实现是
43、org.Apache.catalina.core.standardHost,主要职责是管理和部署子容器上下文。比如主机启动前,预先创建一个部署web应用的目录;当主机启动时,部署web应用程序;在主机运行过程中,定期检查web应用是否需要自动部署,所有这些监控工作都在HostConfig中完成。以下是主机的一些常见配置:
44、1主机部署web应用程序有三种 *** 可以部署主机web应用程序(上下文):Context描述文件部署,默认是%CATALINA_BASE%/conf/[EngineName]/[HostName]/目录下,可以有多个Context配置,后缀必须为.xml。
45、可以通过xmlBase指定Context配置文件存放目录。WAR包部署,即将web应用打包成一个.war部署,默认放在%CATALINA_BASE%/webapps目录下,可以通过appBase指定一个绝对路径。目录部署,默认也是放在%CATALINA_HOME%/webapps目录下。
46、三个部署过程都是解析实例化上下文,后两个web应用可能有自己的META-INF/Context.xml,所以可以通过解析来组装上下文,否则会解析全局
47、%catalina_base%/conf/Context.XML。动词(verb的缩写)Web应用程序上下文Context是Web应用的抽象,有很多组件,结构上比其他容器复杂得多。默认的标准实现是
48、org.Apache.catalina.core.standardcontext,其主要职责是:Wrapper管理,Context下有很多Wrapper,Wrapper是对Servlet的包装抽象,是最小的容器。
49、错误页面ErrorPage管理,在web.xml里可以配置请求处理过程中发生异常重定向的页面路由。会话Session管理。Jar包扫描和加载,一个Context有一个自定义类加载,扫描和加载/WEB-INF/lib下的jar包。
50、热加载,定期检查/WEB-INF/lib和/WEB-INF/classes目录下的.jar和.class文件是否更新,更新了就重新加载。热加载过程较消耗资源,仅适用于开发环境,不可用于生产环境。ServletContainerInitializer的初始化。
51、除了生命周期监听器外,还有很多其他监听器。实例管理。静态资源缓存管理。
52、常见的上下文配置如下
53、1资源配置资源是静态资源的抽象,可以设置缓存来提高响应性能。默认实现是
54、org.Apache.catalina.webresources.standardroot。
55、StandardRoot中有五种webresource *** :WebResourceSet:preResources、classResources、jarResources和postResources。
56、支持的配置如下:
57、Servlet包装器包装器是相对于引擎、主机和上下文的最小容器。它的父容器必须是上下文,并且没有其他子容器。默认实现是
58、org.Apache.catalina.core.standardWrapper.一般来说,Servlet对应一个包装器,这就是Servlet不是线程安全的原因。
59、Servlets以单例实现的形式存在,多线程访问肯定不是线程安全的。虽然有servlet对象池的选择,但是Tomcat0.6并没有推荐这个。要点总结本文只讲解server.xml的常见配置,通过配置文件节点关系大致梳理一下Tomcat的整体架构。
好了,怎么配置tomcat服务器(如何搭建tomcat服务器配置)的知识介绍就到这里,本文到此结束!
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com
本文链接:https://jinnalai.com/n/199285.html