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
原创粉丝点击