Tomcat配置经验谈
来源:互联网 发布:会员推广系统源码 编辑:程序博客网 时间:2024/05/17 22:56
Tomcat配置
1. WEB应用的配置
2. 数据源(资源)&JNDI配置
3. 全局资源(资源)&全局JNDI配置
4. Service配置
a) Connector配置
b) Engine配置
i. Host配置
1) Context配置
备注:
$CATALINA_HOME : tomcat的安装目录
----------------------------------------------------------------------------------
一. WEB应用的配置
有两种方法可以配置一个WEB应用:
1.修改$CATALINA_HOME/config/server.xml,增加context元素
2.在$CATALINA_HOME/config/[engineName]/[hostName]/目录下建立context文件
一下对两种方法进行分别介绍:
方法1:
在Host元素中,增加context元素
<Context path="/[虚拟路径]" docBase="[应用的路径]" debug="0" reloadable="false" >
</Context>
例:
<Host ...>
<Context path="/cmccwap" docBase="E://projects//cmccwap//WebRoot" debug="0" reloadable="false" >
</Context>
</Host>
元素解释:
path – WEB应用相对于容器跟目录的访问路径,如例在本机访问应该使用http://localhost/cmccwap访问此应用
docBase – WEB程序的存放路径,此例放在 E://projects//cmccwap//WebRoot 中
debug – 日志记录等级, 0 = 仅仅是致命错误,输出的内容最少
1= 错误,输出所有错误
2= 警告,输出警告
3= 信息,输出一些常规信息
4= 调试,输出的内容最多
等级越高,输出的内容越多,和log4j是类似的等级机制
reloadable – 是否在WEB应用被改动后自动重新载入应用.true会自动载入改动后的内容,但影响性能.
其中,path和docBase是必须元素,它还有一些其它属性和嵌套元素,详情参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/context.html
方法2
此方法的内容和上面的一样,只是位置不同,此方法为每一个WEB应用写一个配置文件,放在主机目录下,默认情况在$CATALINA_HOME/config/Catalina/localhost目录下,在此目录新建一个XML文件,里面什么都不用,只须把原来在$CATALINA_HOME/config/server.xml中的Context元素改写到新文件就行了,如下:
<?xml version='1.0' encoding='gb2312'?>
<Context path="/cmccwap" docBase="E://projects//cmccwap//WebRoot" debug="0" reloadable="false" >
</Context>
我更喜欢后者,因为这样我不用去该系统的配置文件,减少出错的机会,所以,一下我会以新增加Context配置文件的方式讲.那么就先在$CATALINA_HOME/config/Catalina/localhost建一个cmccwap.xml(通常文件名和应用路径一致,这样好识别)
二. 数据源(资源)&JNDI配置
配置了一个WEB应用后,经常需要各种资源,如数据源,JNDI等,.
在前面,我们已经在$CATALINA_HOME/config/Catalina/localhost目录下这里将进行这方面的说明建立了一个cmccwap.xml文件了.由于这个应用需要一个数据源,所以我们需要给应用配置一个数据源.
数据源是一种资源,tomcat里,资源可以用Resource声明.
Context元素可以嵌套N个Resource,以下是资源声明的全部代码:
<!-- JNDI资源会解释成: java:comp/env/[ResourceName] -->
<!-- 所以本例中的JNDI将是: java:comp/env/jdbc/cmccwap -->
<Resource name="jdbc/cmccwap" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/cmccwap">
<!-- factory 定义连接池的工厂类 -->
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- 数据库的用户名 -->
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<!-- 数据库的密码 -->
<parameter>
<name>password</name>
<value>zd802775880</value>
</parameter>
<!-- 数据库驱动类 -->
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<!-- 数据库URL -->
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://localhost/cmccwap</value>
</parameter>
</ResourceParams>
Resource 元素需要的参数是通过ResourceParams进行传递的. 其中Resource元素的name和type属性是必须的.
而ResourceParams的子元素 parameter 则是以Key-Value对出现的,它嵌套两个元素:name, value
详细信息参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/context.html
备注: Resource和ResourceParams允许0~N个重复.需要注意的是, Resource的name属性的值不能重复, Resource和ResourceParams之间通过name属性进行关联.
三. 全局资源(资源)&全局JNDI配置
以上方法配置的资源只能在一个应用里生效,如果需要跨应用使用资源,则需要利用全局配置了.
顾名思义,全局的资源当然要放在全局的地方了,在tomcat中, $CATALINA_HOME/config/server.xml就是一个全局的配置文件,而全局资源,也就是放在$CATALINA_HOME/config/server.xml中的GlobalNamingResources元素中,内容和$CATALINA_HOME/config/Catalina/localhost/cmccwap.xml中的一样.
一个全局的资源,并不能直接被应用使用,所以,需要把应用和全局的资源关联起来.于是context元素中还有一个ResourceLink元素.前面例子中,如果我们把资源改成全局的后,就可以把里面的Resource和ResourceParams 替换成ResourceLink元素,内容如下:
<ResourceLink name="jdbc/cmccwap" global="jdbc/cmccwap"
type="javax.sql.DataSource"/>
name表示引用全局资源后在应用中使用的名字, global则是全局资源的名称了. type是资源的数据类型.三者缺一不可!
该完这些映射后,其他地方不用做任何修改(tomcat 5.0.28)
在Java中,一个资源通常使用JNDI来命名.
备注:很多人说,用全局数据源需要改WEB应用的配置,但按我的方法在tomcat5.0.28是不需要任何的修改的.也就是说,应用和容器是没任何的耦合的.
四. Service配置
Service主要是配置服务相关的信息,如:连接器,服务引擎,虚拟主机等
1) Connector配置
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
这是一个Tomcat默认的连接器
port = 监控的端口
maxThreads = 最大线程数
minSpareThreads = 最小备用线程
maxSpareThreads = 最大备用线程
enableLookups = 是否激活DNS查询,true 可以用request.getRemoteHost()返回远程客户的主机名
redirectPort = 如果这个连接不支持SSL请求,转发SSL到指定端口
acceptCount = 最大请求队列
debug = 日志等级
connectionTimeout = 连接超时
disableUploadTimeout = 禁用上传超时,主要用于大数据上传时.
有时,为了是一个Tomcat同时监听多个端口,便是通过使用多个Connector进行实现的.只要端口不一样就可以了.
详细内容参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/http.html
2) Engine配置
<Engine name="Catalina" defaultHost="localhost" debug="0">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="catalina_log." suffix=".txt"
timestamp="true"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
resolveHosts="true"
pattern="time: %t form: %a to: %A URL: %U method: %m protocol: %H response state: %s bytes: %b"/>
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
</Host>
</Engine>
属性:
name = 对应$CATALINA_HOME/config/Catalina中的Catalina
defaultHost = 对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost
debug = 日志等级
引擎可以配置:
Host = 虚拟主机,如果只有一个Host,那么,Engine的defaultHost 等于Host的 name属性
一个引擎的可以有一下的嵌套组件:
Logger
Realm
3) Host 配置
一个或多个Host元素必须嵌套在一个引擎元素中
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
1. name在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost
2. debug是日志的调试等级
3. appBase 默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/
4. unpackWARs 设置为true,在Web应用为*.war是,解压此WAR文件.
5. autoDeploy 默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用
详细请参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/host.html
4) Context配置
a) 最简单的Context
<Context path="/demm" docBase="E://projects//demm//WebRoot" debug="0" reloadable="true" >
</Context>
path 访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须.
docBase WEB应用的目录,此目录必须符号Java WEB应用的规范.
debug 日志等级
reloadable 是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件.
b) 可嵌套组件:
i. Loader 配置此WEB应用的Servlet和bean class的ClassLoader,通常,默认设置已经可满足需求
ii. Logger 记录此Context接受和处理的信息
iii. Manager 配置Session的创建、销毁、持久化HTTP Sessions等管理.通常可满足需求
iv. Realm 根据用户和角色数据库配置许可范围,如果不指定,这个应用将关联Host 或 Engine的Realm到本身
c) 如前所述,Context还可以定义Resource
5) Valve 配置
这就像一个阀门,访问资源必须通过它,所以,tomcat中,是用来做访问日志的.
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
resolveHosts="true"
pattern="time: %t form: %a to: %A URL: %U method: %m protocol: %H response state: %s bytes: %b"/>
元素说明:
className : 必须是org.apache.catalina.valves.AccessLogValve
directory : 日志目录
prefix : 日志文件的前缀
suffix : 日志文件的后缀
resolveHosts : 设置为true,使用DNS查找将IP转换远程主机名
pattern : 日志的模式
详情参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/valve.html
1. WEB应用的配置
2. 数据源(资源)&JNDI配置
3. 全局资源(资源)&全局JNDI配置
4. Service配置
a) Connector配置
b) Engine配置
i. Host配置
1) Context配置
备注:
$CATALINA_HOME : tomcat的安装目录
----------------------------------------------------------------------------------
一. WEB应用的配置
有两种方法可以配置一个WEB应用:
1.修改$CATALINA_HOME/config/server.xml,增加context元素
2.在$CATALINA_HOME/config/[engineName]/[hostName]/目录下建立context文件
一下对两种方法进行分别介绍:
方法1:
在Host元素中,增加context元素
<Context path="/[虚拟路径]" docBase="[应用的路径]" debug="0" reloadable="false" >
</Context>
例:
<Host ...>
<Context path="/cmccwap" docBase="E://projects//cmccwap//WebRoot" debug="0" reloadable="false" >
</Context>
</Host>
元素解释:
path – WEB应用相对于容器跟目录的访问路径,如例在本机访问应该使用http://localhost/cmccwap访问此应用
docBase – WEB程序的存放路径,此例放在 E://projects//cmccwap//WebRoot 中
debug – 日志记录等级, 0 = 仅仅是致命错误,输出的内容最少
1= 错误,输出所有错误
2= 警告,输出警告
3= 信息,输出一些常规信息
4= 调试,输出的内容最多
等级越高,输出的内容越多,和log4j是类似的等级机制
reloadable – 是否在WEB应用被改动后自动重新载入应用.true会自动载入改动后的内容,但影响性能.
其中,path和docBase是必须元素,它还有一些其它属性和嵌套元素,详情参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/context.html
方法2
此方法的内容和上面的一样,只是位置不同,此方法为每一个WEB应用写一个配置文件,放在主机目录下,默认情况在$CATALINA_HOME/config/Catalina/localhost目录下,在此目录新建一个XML文件,里面什么都不用,只须把原来在$CATALINA_HOME/config/server.xml中的Context元素改写到新文件就行了,如下:
<?xml version='1.0' encoding='gb2312'?>
<Context path="/cmccwap" docBase="E://projects//cmccwap//WebRoot" debug="0" reloadable="false" >
</Context>
我更喜欢后者,因为这样我不用去该系统的配置文件,减少出错的机会,所以,一下我会以新增加Context配置文件的方式讲.那么就先在$CATALINA_HOME/config/Catalina/localhost建一个cmccwap.xml(通常文件名和应用路径一致,这样好识别)
二. 数据源(资源)&JNDI配置
配置了一个WEB应用后,经常需要各种资源,如数据源,JNDI等,.
在前面,我们已经在$CATALINA_HOME/config/Catalina/localhost目录下这里将进行这方面的说明建立了一个cmccwap.xml文件了.由于这个应用需要一个数据源,所以我们需要给应用配置一个数据源.
数据源是一种资源,tomcat里,资源可以用Resource声明.
Context元素可以嵌套N个Resource,以下是资源声明的全部代码:
<!-- JNDI资源会解释成: java:comp/env/[ResourceName] -->
<!-- 所以本例中的JNDI将是: java:comp/env/jdbc/cmccwap -->
<Resource name="jdbc/cmccwap" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/cmccwap">
<!-- factory 定义连接池的工厂类 -->
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- 数据库的用户名 -->
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<!-- 数据库的密码 -->
<parameter>
<name>password</name>
<value>zd802775880</value>
</parameter>
<!-- 数据库驱动类 -->
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<!-- 数据库URL -->
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://localhost/cmccwap</value>
</parameter>
</ResourceParams>
Resource 元素需要的参数是通过ResourceParams进行传递的. 其中Resource元素的name和type属性是必须的.
而ResourceParams的子元素 parameter 则是以Key-Value对出现的,它嵌套两个元素:name, value
详细信息参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/context.html
备注: Resource和ResourceParams允许0~N个重复.需要注意的是, Resource的name属性的值不能重复, Resource和ResourceParams之间通过name属性进行关联.
三. 全局资源(资源)&全局JNDI配置
以上方法配置的资源只能在一个应用里生效,如果需要跨应用使用资源,则需要利用全局配置了.
顾名思义,全局的资源当然要放在全局的地方了,在tomcat中, $CATALINA_HOME/config/server.xml就是一个全局的配置文件,而全局资源,也就是放在$CATALINA_HOME/config/server.xml中的GlobalNamingResources元素中,内容和$CATALINA_HOME/config/Catalina/localhost/cmccwap.xml中的一样.
一个全局的资源,并不能直接被应用使用,所以,需要把应用和全局的资源关联起来.于是context元素中还有一个ResourceLink元素.前面例子中,如果我们把资源改成全局的后,就可以把里面的Resource和ResourceParams 替换成ResourceLink元素,内容如下:
<ResourceLink name="jdbc/cmccwap" global="jdbc/cmccwap"
type="javax.sql.DataSource"/>
name表示引用全局资源后在应用中使用的名字, global则是全局资源的名称了. type是资源的数据类型.三者缺一不可!
该完这些映射后,其他地方不用做任何修改(tomcat 5.0.28)
在Java中,一个资源通常使用JNDI来命名.
备注:很多人说,用全局数据源需要改WEB应用的配置,但按我的方法在tomcat5.0.28是不需要任何的修改的.也就是说,应用和容器是没任何的耦合的.
四. Service配置
Service主要是配置服务相关的信息,如:连接器,服务引擎,虚拟主机等
1) Connector配置
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
这是一个Tomcat默认的连接器
port = 监控的端口
maxThreads = 最大线程数
minSpareThreads = 最小备用线程
maxSpareThreads = 最大备用线程
enableLookups = 是否激活DNS查询,true 可以用request.getRemoteHost()返回远程客户的主机名
redirectPort = 如果这个连接不支持SSL请求,转发SSL到指定端口
acceptCount = 最大请求队列
debug = 日志等级
connectionTimeout = 连接超时
disableUploadTimeout = 禁用上传超时,主要用于大数据上传时.
有时,为了是一个Tomcat同时监听多个端口,便是通过使用多个Connector进行实现的.只要端口不一样就可以了.
详细内容参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/http.html
2) Engine配置
<Engine name="Catalina" defaultHost="localhost" debug="0">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="catalina_log." suffix=".txt"
timestamp="true"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
resolveHosts="true"
pattern="time: %t form: %a to: %A URL: %U method: %m protocol: %H response state: %s bytes: %b"/>
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
</Host>
</Engine>
属性:
name = 对应$CATALINA_HOME/config/Catalina中的Catalina
defaultHost = 对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost
debug = 日志等级
引擎可以配置:
Host = 虚拟主机,如果只有一个Host,那么,Engine的defaultHost 等于Host的 name属性
一个引擎的可以有一下的嵌套组件:
Logger
Realm
3) Host 配置
一个或多个Host元素必须嵌套在一个引擎元素中
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
1. name在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost
2. debug是日志的调试等级
3. appBase 默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/
4. unpackWARs 设置为true,在Web应用为*.war是,解压此WAR文件.
5. autoDeploy 默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用
详细请参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/host.html
4) Context配置
a) 最简单的Context
<Context path="/demm" docBase="E://projects//demm//WebRoot" debug="0" reloadable="true" >
</Context>
path 访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须.
docBase WEB应用的目录,此目录必须符号Java WEB应用的规范.
debug 日志等级
reloadable 是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件.
b) 可嵌套组件:
i. Loader 配置此WEB应用的Servlet和bean class的ClassLoader,通常,默认设置已经可满足需求
ii. Logger 记录此Context接受和处理的信息
iii. Manager 配置Session的创建、销毁、持久化HTTP Sessions等管理.通常可满足需求
iv. Realm 根据用户和角色数据库配置许可范围,如果不指定,这个应用将关联Host 或 Engine的Realm到本身
c) 如前所述,Context还可以定义Resource
5) Valve 配置
这就像一个阀门,访问资源必须通过它,所以,tomcat中,是用来做访问日志的.
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
resolveHosts="true"
pattern="time: %t form: %a to: %A URL: %U method: %m protocol: %H response state: %s bytes: %b"/>
元素说明:
className : 必须是org.apache.catalina.valves.AccessLogValve
directory : 日志目录
prefix : 日志文件的前缀
suffix : 日志文件的后缀
resolveHosts : 设置为true,使用DNS查找将IP转换远程主机名
pattern : 日志的模式
详情参考:
http://tomcat.apache.org/tomcat-5.0-doc/config/valve.html
- Tomcat配置servlet经验谈
- Tomcat配置经验谈
- Tomcat配置servlet经验谈
- Tomcat配置servlet经验谈-新手必看(推荐)
- Cg配置经验谈
- Cg配置经验谈
- 经验谈
- 经验谈
- 经验谈
- 经验谈
- Tomcat5.0下成功配置servlet经验谈
- Tomcat5.0下成功配置servlet经验谈
- Tomcat5.0下成功配置servlet经验谈
- Catalyst 4000 6000配置经验谈(一)
- Catalyst 4000 6000配置经验谈(二)
- Catalyst 4000 6000配置经验谈(三)
- Catalyst 4000 6000配置经验谈(四)
- 【Tomcat】Tomcat环境变量配置
- 遨游Hibernate之二
- Combox的数据源
- 论四核“冲动”的背后
- ISAPI Rewrite 配置简介
- apache-mod_rewrite详解
- Tomcat配置经验谈
- Windows Vista User Account Control (UAC) 全新安全模块“用户帐户控制”
- 中国外包开发成功与失败的“实态”
- 学生笔记(Oracle第二章)
- 从MySQL导入导出大量数据的程序实现方法
- 前台用户点击增加按钮增加输入行控件,然后保存(惊险经历)
- 为什么外包预算报价会高
- 点击按钮后出现新的输入画面,否则隐藏
- Java WEB 应用字符编码解决方案