tomcat各个配置文件的做用:
前端
Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中,主要有如下几个:web
server.xml:
apache
Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;浏览器
web.xml:tomcat
遵循Servlet规范标准的配置文件,用于配置servlet,并为全部的Web应用程序提供包括MIME映射等默认配置信息;安全
tomcat-user.xml:服务器
Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认状况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将经过编辑此文件实现;并发
catalina.policy:app
Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;webapp
catalina.properties:
Tomcat内部package的定义及访问相关的控制,也包括对经过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
logging.properties:
Tomcat6经过本身内部实现的JAVA日志记录器来记录操做相关的日志,此文件即为日志记录器相关的配置信息,能够用来定义日志记录的组件级别以及日志文件的存在位置等;
context.xml:全部host的默认配置信息;
核心配置文件server.xml
Tomcat以面向对象的方式运行,它能够在运行时动态加载配置文件中定义的对象结构,这有点相似于apache的httpd模块的调用方式。server.xml中定义的每一个主元素都会被建立为对象,并以某特定的层次结构将这些对象组织在一块儿。下面是个样样例配置:
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <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 name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443"/> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> </Server> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <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 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"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <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 "%r" %s %b" /> </Host> </Engine> </Service> </Server>
server.xml文件中可定义的元素很是多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等。
下面简单介绍几个经常使用组件:
一、Server组件
如上面示例文件中定义的:
<Server port=”8005” shutdown=”SHUTDOWN”>
这会让Tomcat6启动一个server实例(即一个JVM),它监听在8005端口以接收shutdown命令。各Server的定义不能使用同一个端口,这意味着若是在同一个物理机上启动了多个Server实例,必须配置它们使用不一样的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,所以,管理员能够直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这一般不容许远程进行。
Server的相关属性:
className: 用于实现此Server容器的彻底限定类的名称,默认为org.apache.catalina.core.StandardServer;
port: 接收shutdown指令的端口,默认仅容许经过本机访问,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
二、Service组件:
Service主要用于关联一个引擎和与此引擎相关的链接器,每一个链接器经过一个特定的端口和协议接收入站请求交将其转发相当联的引擎进行处理。困此,Service要包含一个引擎、一个或多个链接器。
如上面示例中的定义:
<Service name=”Catalina”>
这定义了一个名为Catalina的Service,此名字也会在产生相关的日志信息时记录在日志文件当中。
Service相关的属性:
className: 用于实现service的类名,通常都是org.apache.catalina.core.StandardService。
name:此服务的名称,默认为Catalina;
三、Connector组件:
进入Tomcat的请求能够根据Tomcat的工做模式分为以下两类:
Tomcat做为应用程序服务器:请求来自于前端的web服务器,这多是Apache, IIS, Nginx等;
Tomcat做为独立服务器:请求来自于web浏览器;
Tomcat应该考虑工做情形并为相应情形下的请求分别定义好须要的链接器才能正确接收来自于客户端的请求。一个引擎能够有一个或多个链接器,以适应多种请求方式。
定义链接器可使用多种属性,有些属性也只适用于某特定的链接器类型。通常说来,常见于server.xml中的链接器类型一般有4种:
1) HTTP链接器
2) SSL链接器
3) AJP 1.3链接器
如上面示例server.xml中定义的HTTP链接器:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443"/>
定义链接器时能够配置的属性很是多,但一般定义HTTP链接器时必须定义的属性只有“port”,定义AJP链接器时必须定义的属性只有"protocol",由于默认的协议为HTTP。如下为经常使用属性的说明:
1) address:指定链接器监听的地址,默认为全部地址,即0.0.0.0;
2) maxThreads:支持的最大并发链接数,默认为200;
3) port:监听的端口,默认为0;
4) protocol:链接器使用的协议,默认为HTTP/1.1,定义AJP协议时一般为AJP/1.3;
5) redirectPort:若是某链接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
6) connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
7) enableLookups:是否经过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;
8) acceptCount:设置等待队列的最大长度;一般在tomcat全部处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;
下面是一个定义了多个属性的SSL链接器:
<Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
四、Engine组件:
Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine须要defaultHost属性来为其定义一个接收全部发往非明肯定义虚拟主机的请求的host组件。如前面示例中定义的:
<Engine name="Catalina" defaultHost="localhost">
经常使用的属性定义:
defaultHost:Tomcat支持基于FQDN的虚拟主机,这些虚拟主机能够经过在Engine容器中定义多个不一样的Host组件来实现;但若是此引擎的链接器收到一个发往非非明肯定义虚拟主机的请求时则须要将此请求发往一个默认的虚拟主机进行处理,所以,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;
name:Engine组件的名称,用于日志和错误信息记录时区别不一样的引擎;
jvmRoute=
Engine容器中能够包含Realm、Host、Listener和Valve子容器。
五、Host组件:
位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面示例中的定义:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
经常使用属性说明:
1) appBase:此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可使用基于$CATALINA_BASE的相对路径; 2) autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true; 3) unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;