您的位置:首页 > 运维架构 > Tomcat

tomcat核心组件及server.xml配置讲解

2017-09-08 13:05 471 查看
<!--tomcat最核心组件:Server Service Connector Engine Host Context;
其他组件都可归为内嵌组件(即是嵌入在这几种组件中的)
-->
<!--每一个元素标签都对应tomcat的一个组件,通过元素配置实现对组件的控制, -->
server.xml配置文件结构如下:
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost"  appBase="webapps" xmlBase="conf/Catalina/localhost/web.xml"unpackWARs="true" autoDeploy="true" deployOnStartup="true"></Host><Host name="www.baidu.com"  appBase="web-baidu"unpackWARs="true" autoDeploy="true"></Host><Host name="www.sina.com"  appBase="web-sina"unpackWARs="true" autoDeploy="true"><Context  docBase="" path="" reloadable=""></Context><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service></Server>
<?xml version='1.0' encoding='utf-8'?><!--tomcat最核心组件:Server Service Connector Engine Host Context;
其他组件都可归为内嵌组件(即是嵌入在这几种组件中的)
-->
<!--每一个元素标签都对应tomcat的一个组件,通过元素配置实现对组件的控制, --><!--server :顶层元素,代表整个tomcat容器,必须唯一,整个配置文件的根元素作用:提供一个接口让客户端能够访问到里面的Service集合,同时维护它所包含的所有Service的生命周期(包括如何初始化、如何结束服务、如何找到客户端要访问的Service等)shutdown:表示关闭Server的指令;port:表示Server接收shutdown指令的端口号,设为-1可禁掉该端口--><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><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><!--Service :顶层元素,可以有一个或多个,包括一个Engine元素及一组Connector元素作用:将Connector与Engine组装在一起,对外提供服务;可包含多个Connector,但只能有一个Engine;其中Connector的作用是接收客户端请求,Engine则是处理接收到的请求;--><Service name="Catalina">    <!--这里Service名为Catalina,也可以为配置为tomcat提供的其他Service,监听端口不一样--><!--Connector :连接器,代表外部客户端发送请求到特定service的接口;同时也是外部客户端从特定service接收响应的接口;作用:接收连接请求,创建Request和Response对象 用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine.port: 客户端请求Service的端口号protocol:请求的协议connectionTimeout:连接的超时时间redirectPort:表示当强制要求HTTPS而请求是http时,将连接重定向到8443端口额外话:实际上,即使在正式的生产环境中,常常配置的也是8080端口,而非80端口;因为 在实际中,很少将tomcat直接对外开放来接收请求,而是在tomcat与客户端之间加了一层代理服务器(如nginx)用于请求的转发、负载均衡、处理静态文件等;tomcat与nginx一般是在同一个局域网内,所以一般不用80端口。--><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><!--配置这个Connector,代表客户端可以通过8009端口号使用AJP协议访问tomcat;AJP协议负责和其他的http服务器(如Apache)建立连接,在把tomcat与其他http服务器集成时,就需要用到这个连接。之所以使用tomcat和其他服务器集成,是因为tomcat可以用作servlet/JSP容器,但是对于静态资源的处理速度较慢,性能不如Apache、IIS等http服务器;因此常常将tomcat与Apache等集成,tomcat作servlet容器,Apache处理静态资源,这里的AJP协议则是负责两者的连接的--><Connected46or port="8009" protocol="AJP/1.3" redirectPort="8443" /><!-- 容器:(Engine、Host、Context),容器的作用是处理Connector接收进来的请求,并产生相应的响应Engine Host Context三者都是容器,但并非是平行关系,而是父子(包含)关系,其中Engine包含Host,Host包含Context。Engine:可以处理Service中所有请求;Host:可以处理发向一个特定虚拟主机的所有请求;Context:可以处理一个特定Web应用所有请求;--><!-- Engine在Service中有且只有一个,负责处理请求,其从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传给客户端。name:用于日志和错误信息;defaultHost:制定默认的Host名称,当发往本机的请求指定的Host名称不存在时,一律使用其指定的Host进行处理;因此,defaultHost的值必须与该Engine下的一个Host的name属性值匹配。--><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><!-- Host是Engine的子容器,Engine下可以有一个或多个Host组件,每个Host代表Engine中的一个虚拟主机但至少有一个,且其中一个(有且只有一个)的name属性值必须与Engine的name属性相匹配。作用:运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。一个Host对应了服务器中一个网络名实体(如www.baidu.com,或ip地址 123.12.34.22),为了使用户可以通过网络名连接tomcat服务器,这个名字应该中DNS服务器上注册;客户端通常使用主机名来标识它们希望连接的服务器该主机名会包含中http请求头中,tomcat从http请求头提取出主机名,寻找匹配的主机来发送资源寻找请求,若没有匹配上,请求将发往默认主机,所以默认主机可以不需要在DNS服务器上注册。这里为了方便讲解,我将配置三个Host,其中:appBase:代表资源寻找的文件目录;unpackWARs:代表是否将代表Web应用的WAR文件解压(这里开发过web项目的同学应该知道,部署tomcat时,资源是放在WAR包下的)为true 代表通过解压后的文件结构运行该Web应用;为false代表直接使用WAR文件运行Web应用。autoDeploy:是否自动部署(运行期间定期检查),即如果更新资源后,是否会自动检查更新并部署,为true代表会自动更新资源部署,deployOnStartup:是否自动部署(启动tomcat时检查),即如果检查到新的Web应用或者Web应用有更新时,触发部署为true代表会自动更新资源部署,以上两种检查更新都是检查appBase与xmlBase两个目录下资源是否有变动xmlBase: 默认目录为conf/Engine_name/host_name,如该配置文件就是conf/Catalina/localhost,不配置该项代表使用默认--><!-- 该Host的name与Engine的defaultHost相匹配,如果发送到本机的请求中没有指定host,则默认进入该主机(webapps目录下)寻找所请求的资源--><Host name="localhost"  appBase="webapps" xmlBase="conf/Catalina/localhost/web.xml"unpackWARs="true" autoDeploy="true" deployOnStartup="true"></Host><!-- 如果发送到本机的请求中指定host为"www.baidu.com",则进入该主机(web-baidu目录下)寻找所请求的资源--><Host name="www.baidu.com"  appBase="web-baidu"unpackWARs="true" autoDeploy="true"></Host><!-- 如果发送到本机的请求中指定host为"www.sina.com",则进入该主机(web-sina目录下)寻找所请求的资源--><Host name="www.sina.com"  appBase="web-sina"unpackWARs="true" autoDeploy="true"><!--一个Context代表一个Web应用,一个Host下可以有多个Context,代表可以把多个Web应用部署中一台虚拟主机下docBase:指定Web应用使用的WAR包路径,或应用目录;注意:在自动部署场景下,docBase不在appBase目录中,才需要指定,如果docBase指定的WAR或应用目录已经在appBase下了,就没必要指定,因为tomcat会直接扫描appBase目录了。path: 指定web应用的上下文路径,当请求到来时,tomcat根据web应用的path属性与URL的匹配程度来选择web应用处理相应请求例如:web应用app1的path是/app1; web应用app2的path是app2,当请求/app1/index.jsp来到时将交由app1来处理;若path属性为“ ”(空),那么这个Context将是所在的虚拟主机的默认Web应用,当请求URL都匹配不上path时,将交由该Context来处理。注意:自动部署场景下,不能指定path属性,path属性由配置文件名、WAR文件名或应用目录名自动推导出来,reloadable:指示tomcat是否在运行时监控WEB-INF/classes和WEB-INF/lib目录下的class文件的改动,为true时,当检测到有改动,会触发web应用的重新加载,开发时一般设置为true,便于调试;生产环境中为true会个服务器带来一些性能压力,默认为false。--><Context  docBase="" path="" reloadable=""></Context><!--Valve的意思是“阀门“,可以与三种容器的任意一种关联,valve不止这里的一种,每种有自己的特性这里的AccessLogValve的作用是记录该虚拟主机处理的所有请求的日志;每天的日志记录到一个文件,classesName:类型pattern:日志记录的格式,%h:远程主机名/ip  %l:远程逻辑用户名, %u:授权的远程用户名%t:时间  %r:请求的第一行  %s:响应状态码 200、404等  %b:响应的数据量,不包括请求头。--><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service></Server>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息