tomcat的server.xml常用配置(一)
知识的聚合也是一种力量!
--题记
为了梳理以往学习的知识,方面今后的查看,提高效率,基于这样的目的,我开始博文写作。
鄙人写的第一篇博文,内容多有疏漏。还望各位大牛见谅,批评指正。下面开始介绍。
首先,当我们打开tomcat的server.xml文件,分析其结构。
<?xml version='1.0' encoding='utf-8'?>
<Server >------ ------是tomcat的顶层元素,它代表整个Catalina Servlet容器。.由org.apache.catalina.Server接口来定义。
属性 ------ ------1.port 指定容器的端口号,用于监听、负责关闭tomcat的请求。
2.shutdown 发送到端口上,用于关闭tomcat服务器的命令。
3.className 实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer类。
<Listener /> ------ ------ 嵌套元素,可以加入到各个组件中,可以嵌套在Engine元素中,但至多只能嵌套一次。监听器元素,用于监听Context的整个生命周期,包
括启动,运行,摧 毁。 由 org.apache.catalina.LifecycleListener 接口定义,使用时,必须实现该接口 。
属性------ ------className 实现了org.apache.catalina.LifecycleListener 接口的类名。
......
<GlobalNamingResources>------ ------嵌套元素。服务器的全局JNDI资源元素,用于资源的配置,如数据源。
<Resource />------ ------资源元素,主要用于配置数据源。可以直接配置在context元素下,这时数据源就只有他所属的应用能够访问。
属性------ ------name 数据源名称,由自己定义的,一般能见名思意。
------ ------auth 是连接池管理权属性,Container表示容器管理,由api提供,有“Container” ,“Application” 等选择。
------ ------type 是对象的类型,为该资源所需要的接口的实现类。如“javax.sql.DataSource”。
------ ------maxActive 连接池的最大数据库连接数。设为0表示无限制。
------ ------maxWait 如果超过此时间将接到异常。设为-1表示无限制。最大等待毫秒数, 单位为 ms, 超过时间会出错误信息。
------ ------maxIdle 最大等待连接中的数量,设 0 为没有限制。
------ ------url 数据源的路径
------ ------username 数据库用户名
------ ------password 密码
<ResourceLink />------ ------ 节省资源,共享同一个数据源,可以配置在Server.xml的GlobalNamingResources节点下,在应用中可以通过别名访问
属性------ ------name 别名
------ ------global 在GlobalNamingResources所定义的资源。
------ ------type 是对象的类型,为该资源所需要的接口的实现类。如“javax.sql.DataSource”。
<Service>------ ------连接器元素,由org.apache.catalina.Service 接口定义,它包含一个Engine 元素以及一个
或多个Connector 元素,这些Connector 元素共享同一个Engine元素。
负责处理所有Connector 所获得的客户请求。
默认的service是Catalina。
属性------ ------name service名
<Connector />------ ------表示客户端和Service之间的连接,一个直接侦听来自浏览器的http请求,一个侦听来自其他WebServer 的请求。常用的属性就不介绍
了。
属性------ ------executor 线程池的名称
------ ------maxThreads 最大线程数
------ ------minSpareThreads 最少空闲线程数
------ ------maxSpareThreads 最大空闲线程数
------ ------compression 打开压缩功能,on 或者 off
------ ------compressionMinSize 启用压缩的输出内容大小
------ ------noCompressionUserAgents 对于指定的浏览器,不启用压缩 如 noCompressionUserAgents="gozilla, traviata"
------ ------compressableMimeType 压缩类型 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
注:HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客
户端的浏览器负责解 压缩并浏览。相对于普通的浏览过程HTML ,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的
是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
<Connector />
......
<Engine>------ ------每一个service只能有一个engine,处理同一个service中所有connector接受到的客户请求。由org.apahce.catalina.Engine 接口定义。
Engine 可以包含元素Logger、Realm、Value和Host。
属性------ ------name engine名
------ ------defaultHost 默认主机名,<Engine>中的<Host>子元素中必须定义这一主机
<Realm className="org.apache.catalina.realm.LockOutRealm">------ ------其实就是一个存放用户名,密码及角色的一个“数据库”。
Realm有下面几种,你也可以使用自己的Realm,只要实现
org.apache.catalina.Realm就可以了。
UserDatabaseRealm,默认配置,只是用于少量用户
授权信息存在用户数据JNDI资源中,该资源通常是一个XML文档 (conf/tomcat-users.xml)
JNDIRealm 授权信息存在LDAP目录服务器中,通过JNDI提供者访问
DataSourceRealm授权信息存在关系数据库中, 通过JNDI JDBC数据源访问
数据库中必须至少有两张表,表示用户及角色
用户表必须至少有两个字段,用户名及密码
角色表必须至少有两个字段,用户名及角色
JDBCRealm授权信息存在关系数据库中, 通过JDBC驱动访问
数据库中必须至少有两张表,表示用户及角色
用户表必须至少有两个字段,用户名及密码
角色表必须至少有两个字段,用户名及角色
最后,如果你需要加密密码,那么需要只需要在Realm配置中指定所用的摘要算法就可以了
digist="MD5"
</Realm >
<Host>------ ------Host元素由Host接口定义。一个Engine元素可以包含多个Host元素,每个Host元素
定义了一个虚拟主机,它包含了一个或多个Web 应用。在Host 元素中可以包含子元素
Logger、Realm、Valve和Context。
属性------ ------className 指定实现Host接口的类.默认值为StandardHost
------ ------appBase 指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认为
<CATALINA_HOME>/webapps
------ ------autoDeploy 如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进
来,会自运发布这个WEB应用
------ ------unpackWARs 如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为
WAR文件
------ ------alias 主机别名
------ ------deployOnStartup 如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的
server.xml没有相应的<Context>元素,将采用Tomcat默认的Context
------ ------name 主机名
<Context />------ ------它由Context接口定义,是使用最频繁的元素。每个<Context>元素代表了运行在虚拟主机上的单个Web应用。一个<Host>可
以包含多个<Context>元素。每个web应用有唯一的一个相对应的Context代表web应用自身。servlet容器为第一个web应用创建
一个。
属性 ------ ------className 指定实现Context的类,默认为StandardContext类
------ ------path 指定访问Web应用的URL入口,注意/myweb,而不是myweb了事。
------ ------reloadable 如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件
的改变,如果监视到有class文件被更新,服务器自重新加载Web应用。
------ ------cookies 指定是否通过Cookies来支持Session,默认值为true
------ ------useNaming 指定是否支持JNDI,默认值为了true
<Valve />------ ------功能和logger差不多 ,Catalina 会为该容器处理的所有请求创建访问日志
属性 ------ ------className 指定valve使用的类名,
------ ------directory 指定log文件的位置
------ ------pattern有2个值,common方式记录远程主机名,或者ip地址,用户名,日期,第一行请求的字符串,http响
应代码,发送的字节数。combined方式记录的更多。
</Host>
</Engine>
</Service>
</Server>
一次访问Tomcat的处理过程
对于一次访问过程,主要有以下几个步骤,假设来自客户的请求为:http://localhost:8080/test/index.jsp。
(1)请求被发送到本机端口8080,被在那里侦听的HTTP Connector 获得;
(2)Connector 把该请求交给它所在的Service 的Engine 来处理,并等待来自Engine 的回应;
(3)Engine获得请求localhost/test/ index.jsp,匹配它所拥有的所有虚拟主机Host;
(4)Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为当前Engine的默认主机);
(5)localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context;
(6)Host 匹配到路径为/test 的Context(如果匹配不到就把该请求交给路径名为""的Context去处理);
(7)path="/test"的Context 获得请求/index.jsp,在它的mapping table 中寻找对应的Servlet;
(8)Context匹配到URL PATTERN 为*.jsp的Servlet,对应于JspServlet类;
(9)HttpServletRequest对象和HttpServletResponse 对象,作为参数调用JspServlet的 doGet或doPost方法;
(10)Context把执行完了之后的HttpServletResponse 对象返回给Host;
(11)Host把HttpServletResponse对象返回给Engine;
(12)Engine把HttpServletResponse对象返回给Connector;
(13)Connector 把HttpServletResponse对象返回给客户浏览器。