自15年毕业到现在已经入行两年多了,一直以来没有深入的了解过tomcat的详细配置,只懂修改一下端口号。在网上找了些相关资料来支撑这篇文章,深入了解server.xml文件各配置的作用
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<!--属性说明:
port:指定一个端口号,这个端口负责监听关闭tomcat的请求
shutdown:向以上端口发送关闭tomcat的命令字符创-->
<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元素,元素处理service下所有Connector元素接收到的客户请求 -->
<Service name="Catalina">
<!--Connector元素:由Connector接口定义,Connector元素代表与客户程序实际交互的组件,负责接收客户端的请 求,以及向客户返回响应结果。
Connector属性说明:
port: 指定服务器端要创建的端口号,并在这个端口监听客户端的请求
protocol: 使用的协议
connectionTimeout: 指定的超时时间(毫秒)
redirectPort: 指定服务器正在处理http请求时收到一个SSL传输请求后重定向的端口号
URIEncoding: 编码方式
compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP压缩的资源的类型
compression:(default=off) 是否启用GZIP压缩,可以取值 on/off/force,设置为on之后会对 compressableMimeType 属性指定的资源类型启用GZIP压缩
maxThreads: 设定了在监听端口的线程最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目,默认 值是200
address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有 IP地址
minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责
maxProcessors:最多可以创建的处理请求的线程数
minSpareThreads:最小备用线程
maxSpareThreads:最大备用线程
enableLookups: 如果是true,则可以通过调用request.getRemoteHost()进行DNS查询类得到远程客户端的实 际主机名,若为false则不进行dns查询,而是返回其ip地址 -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" enableLookups="false"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!-- 每个Engine元素可以包含多个host元素,每个host元素定一个一个虚拟主机,它包含一个或多个web应用
属性说明:
name: 在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost虚拟主机名
unpackWARs: 如果位置为true,在web应用为*.war时,会自动解压此war文件,否则不解压直接从war文件中运行 web应用
autoDeploy: 默认为true,表示如果有新的web应用放入appBase,并且tomcat在运行的情况下,自动载入应用
appBase: 默认的应用路径,也就是把应用放在一个目录下,并且在autoDeploy为true的情况下,可自动部署
-->
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!--
属性说明:
path: 访问的url,如:http://localhost/是我的应用根目录,访问此应用将用:http://localhost/demo 进行操作,此元素必须。表示此web应用的url前缀,用来匹配一个context,请求的url形式为 http://localhost:8080/path/*
reloadable: 是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件。
true: tomcat将支持热部署,会自动检测web应用的/WEB-INF/lib和/WEB-INF/classes目录的变化, 自动装载新的jsp和Servlet,我们可以在不重启tomcat的情况下改变web应用 -->
<Context path="/demo" reloadable="false" docBase="D:\wxapp\branches\wxapp_webapps\src\main\webapp\WEB-INF" />
<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>
元素#####
由Connector接口定义,元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果。
一个Connector(连接器)代表一个请求被接收和应答所需要的端口,每个连接器通过相关的container(容器)处理请求。
默认情况下,一个非SSL的HTTP/1.1的连接器被绑定在端口8080。你有也可以通过根据后面的使用说明并取消第二个连接器入口的注释,在端口8443上建立一个SSL HTTP/1.1的连接器。
默认情况下,当一个web应用程序调用程序时DNS查询是可行的,但是这会对性能造成一些不利的影响,因此将“enableLookups”设置成false来关闭DNS查询,当DNS查询被关闭时,request.getRemoteHost()将返回包含远程客户IP地址的字符串。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
port: 在端口号8080处侦听来自客户browser的http 1.1请求,如果把8080改成80,只需要输入http://localhost/ 即可
protocol: 设定http协议为,默认值为http/1.1,值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3
redirectPort: 当客户请求是https时,把该请求转发到端口8443去
scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”
URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
AJP连接器:
用于将Apache与Tomcat集成在一起,当Apache接收到动态内容请求时,通过在配置中指定的端口号将请求发送给在此端口号上监听的AJP连接器组件。
两个Connection元素,第一个Connection元素定义了一个http connector,它通过8080端口接收http请求,第二个Connector元素定义了一个JD connectoer,它通过8009端口接收由其他服务器转发过来的请求。
元素#####
它由Host接口定义.一个Engine元素可以包含多个元素.每个的元素定义了一个虚拟主机.它包含了一个或多个Web应用.
appBase : 指 定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认 为<CATALINA_HOME>/webapps. 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处 理
autoDeploy:如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
unpackWARs:如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
alias:指定主机别名,可以指定多个别名
deployOnStartup:如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用 中的server.xml没有相应的元素,将采用Tomcat默认的Context
在元素中可以包含如下子元素
, , ,
元素#####
他由context接口定义,是使用最为频繁的元素,每个元素代表了运行在虚拟主机上的单个web应用,一个元素可以包含多个元素,每个web应用有唯一的一个相对应的context代表web应用自身,servlet容器为第一个应用创建一个
<Context path="" docBase="mycontext" debug="0"/>
path: 该context的路径名是"",故该context是该host的默认context
docBase: 该context的根目录是 webapps/mycontext/
reloadable:如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录 CLASS文件的改运.如果监视到有class文件 被更新,服务器自重新加载Web应用
useNaming:指定是否支持JNDI,默认值为了true
cookies指定是否通过Cookies来支持Session,默认值为true