• Tomcat 下4个xml配置文件详细介绍


    Tomcat 的配置文件并不多,由4个 xml 文件组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml 这几个文件。每个文件都有自己的功能与配置方法,本文将逐一的详细介绍这几个配置文件。

    一、context.xml 文件

    Context.xml 是 Tomcat 公用的环境配置,tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。推荐在 $CATALINA_BASEconf/context.xml 中进行独立的配置。因为 server.xml
    是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载,而context.xml 文件则不然。


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18
    <Context path="/eml" docBase="eml" debug="0" reloadbale="true" privileged="true">  
           
        <WatchedResource>WEB-INF/web.xml</WatchedResource>  
           
        <WatchedResource>WEB-INF/eml.xml</WatchedResource> 监控资源文件,如果web.xml || eml.xml改变了,则自动重新加载改应用。  
           
        <Resource name="jdbc/testSiteds" 表示指定的jndi名称  
        auth="Container" 表示认证方式,一般为Container  
        type="javax.sql.DataSource"  
        maxActive="100" 连接池支持的最大连接数  
        maxIdle="40" 连接池中最多可空闲maxIdle个连接  
        maxWait="30000" 连接池中连接用完时,新的请求等待时间,毫秒  
        username="txl" 表示数据库用户名  
        password="123456" 表示数据库用户的密码  
        driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER  
        url="jdbc:mysql://localhost:3306/testSite" /> 表示数据库URL地址  
           
    </Context>
    context.xml 的三个作用范围:

    1. tomcat server 级别:

    在$CATALINA_BASE/conf/context.xml 里配置,如果你在这个地方配置、那么这个配置文件将会被所有的webApp共享 。

    2. Host 级别:

    在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 context.xml,继而进行配置,这个配置将会被这个主机上的所有webapp共享。

    3. web app 级别:

    在 $CATALINA_BASE/conf/Catalina/${hostName} 里添加 ${webAppName}.xml,继而进行配置。

    此时,path="",

    webAppName 即为 path属性的值,也就是访问的虚拟目录。

    另:tomcat 服务器文件中的 $CATALINA_BASE/webapps 目录下的所有文件夹都是一个应用。这个时候不需要自己动手配置,服务器默认将文件夹名映射成虚拟目录名称。还可以通过 $CATALINA_BASE/webapps/{App}/META-INF/context.xml 来配置,这个是在web应用中自己添加的,配置和其它一样。

    <context> 标签是使用,见:

    二、web.xml文件

     Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的 web.xml 文件的父文件。
     <web-app >
     <filter></filter> 
     <filter-mapping></filter-mapping> 
     <servlet></servlet> 
     <servlet-mapping></servlet-mapping> 
     <session-config></session-config>
     <mime-mapping></mime-mapping>
     <welcome-file-list></welcome-file-list> 
     </web-app >


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59
    <!-- 
    filter 配置Servlet过滤器 
    filter-name 定义过滤器的名字。当有多个过滤器时,不能同名 
    filter-class 指定实现这一过滤的类,这个类负责具体的过滤事务 
    --> 
    <filter> 
    <filter-name>SampleFilter</filter-name> 
    <filter-class>mypack.SampleFilter</filter-class> 
    </filter> 
     
    <!-- 
    filter-mapping 设定过滤器负责过滤的URL 
    filter-name 过滤器名。这里的名字一定要和filter中的过滤器名匹配 
    url-pattern 指定过滤器负责过滤的URL 
    --> 
    <filter-mapping> 
    <filter-name>SampleFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
    </filter-mapping> 
     
    <!-- 
    servlet 配置Servlet. 
    servlet-name 定义Servlet的名字 
    servlet-class 指定实现这个servlet的类 
    init-param 定义Servlet的初始化参数和参数值,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数 
    load-on-startup 指定当Web应用启动时,装载Servlet的次序。 
    当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet. 
    当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它 
    --> 
    <servlet> 
    <servlet-name>SampleServlet</servlet-name> 
    <servlet-class>mypack.SampleServlet</servlet-class> 
    <init-param> 
    <param-name>initParam1</param-name> 
    <param-value>2</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
     
    <!-- 
    配置servlet映射(下面代码为SampleServlet指定的相对URL为"/sample": 
    servlet-name 指定servlet的名字,这里的名字应该和<Servlet>元素中定义的名字匹配。 
    url-pattern 指定访问这个servlet的URL。只需给出相对路径。 
    --> 
    <servlet-mapping> 
    <servlet-name>SampleServlet</servlet-name> 
    <url-pattern>/sample</url-pattern> 
    </servlet-mapping> 
     
    <!--配置session session用来设定HttpSession的生命周期。单位(秒)--> 
    <session-config> 
    <session-timeout>30</session-timeout> 
    </session-config> 
     
    <!--配置Wel0come0文件清单--> 
    <welcome-file-list> 
    <welcome-file>login.jsp</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    </welcome-file-list>
    该文件基本不用配置,Tomcat7 支持 Servlet3.0 注解定义,无需配置 web.xml。为了使 Tomcat 能够运行 CGI,必须把关于<servlet-name> CGI 的那段的注释去掉。

    更多细节请参考:http://blog.163.com/ny_lonely/blog/static/18892427320136925044357

    三、server.xml文件

    server.xml是对tomcat的设置,可以设置端口号,添加虚拟机这些的,是对服务器的设置。


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.security.SecurityListener" />
      <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> 
      <!-- 定义的一个名叫“UserDatabase”的认证资源,将conf/tomcat-users.xml加载至内存中,在需要认证的时候到内存中进行认证 --> 
      <Service name="Catalina"> 
      <!-- # 定义Service组件,同来关联Connector和Engine,一个Engine可以对应多个Connector,每个Service中只能一个Engine --!> 
        <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
        <!-- 修改HTTP/1.1的Connector监听端口为80.客户端通过浏览器访问的请求,只能通过HTTP传递给tomcat。还可以设置server与URIEncoding参数 --> 
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
        <Engine name="Catalina" defaultHost="test.com"> 
        <!-- 修改当前Engine,默认主机是,www.test.com  --> 
        <Realm className="org.apache.catalina.realm.LockOutRealm"> 
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
                   resourceName="UserDatabase"/> 
        </Realm> 
        # Realm组件,定义对当前容器内的应用程序访问的认证,通过外部资源UserDatabase进行认证 
          <Host name="test.com"  appBase="/web" unpackWARs="true" autoDeploy="true"> 
          <!--  定义一个主机,域名为:test.com,应用程序的目录是/web,设置自动部署,自动解压    --> 
            <Alias>www.test.com</Alias> 
            <!--    定义一个别名www.test.com,类似apache的ServerAlias --> 
            <Context path="" docBase="www/" reloadable="true" /> 
            <!--    定义该应用程序,访问路径"",即访问www.test.com即可访问,网页目录为:相对于appBase下的www/,即/web/www,并且当该应用程序下web.xml或者类等有相关变化时,自动重载当前配置,即不用重启tomcat使部署的新应用程序生效  --> 
            <Context path="/bbs" docBase="/web/bbs" reloadable="true" /> 
            <!--  定义另外一个独立的应用程序(虚拟主机),访问路径为:www.test.com/bbs,该应用程序网页目录为/web/bbs   --> 
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs" 
                   prefix="www_access." suffix=".log" 
                   pattern="%h %l %u %t "%r" %s %b" /> 
            <!--   定义一个Valve组件,用来记录tomcat的访问日志,日志存放目录为:/web/www/logs如果定义为相对路径则是相当于$CATALINA_HOME,并非相对于appBase,这个要注意。定义日志文件前缀为www_access.并以.log结尾,pattern定义日志内容格式,具体字段表示可以查看tomcat官方文档   --> 
          </Host> 
          <Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
          <!--   定义一个主机名为man.test.com,应用程序目录是$CATALINA_HOME/webapps,自动解压,自动部署   --> 
            <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.16.100.*" /> 
            <!--   定义远程地址访问策略,仅允许172.16.100.*网段访问该主机,其他的将被拒绝访问  --> 
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs" 
                   prefix="bbs_access." suffix=".log" 
                   pattern="%h %l %u %t "%r" %s %b" /> 
            <!--   定义该主机的访问日志      --> 
          </Host> 
        </Engine> 
      </Service> 
    </Server>
    1、<Server>元素:
    是整个配置文件的根元素。表示整个Catalina容器。

    属性:
    className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache.catalina.core.StandardServer类;
    Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须);
    Shutdown:发送到端口上用于关闭Tomcat服务器的命令;

    2、<Connector>元素:
    连接器,负责接收客户的请求,以及向客户端回送响应的消息。

    HTTP连接器:

    属性:
    allowTrace:是否允许HTTP的TRACE方法,默认为false;
    emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false;
    enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址;
    maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152;
    protocol:值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3;
    proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回;
    redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理;
    scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”;
    secure:在SSL连接器可将其设置为true,默认为false;
    URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1;
    useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false;
    xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false;
    acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10;
    bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节;
    compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain;
    compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off;
    connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒;
    disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false;
    maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节;
    maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100;
    maxSpareThreads:允许存在空闲线程的最大数目,默认值为50;
    minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4;
    port:服务端套接字监听的TCP端口号,默认值为8080(必须);
    socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节;
    toNoDelay:为true时,可以提高性能。默认值为true;
    threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY;

    例如:

    1

    2

    3
    <Connector
    port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
    redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
    AJP连接器:
    用于将Apache与Tomcat集成在一起,当Apache接收到动态内容请求时,通过在配置中指定的端口号将请求发送给在此端口号上监听的AJP连接器组件。

    属性:
    backlog:当所有可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝;
    maxSpareThread:允许存在空闲线程的最大数目,默认值为50;
    maxThread:最大线程数,默认值为200;
    minSpareThreads:设当连接器第一次启动时创建线程的数目,确保至少有这么多的空闲线程可用,默认值为4;
    port:服务端套接字的TCP端口号,默认值为8089(必须);
    topNoDelay:为true时,可以提高性能,默认值为true;
    soTimeout:超时值;

    例如:


    1

    2
    <!—Define an AJP1.3 Connector on port 8089-->
    <Connector port="8089" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
    3、<Engine>元素:
    为特定的Service处理所有的请示。每个Service只能包含一个Engine元素,它负责接收和处理此Service所有的连接器收到的请求,向连接发回响应,并最终显示在客户端。<Engine>至少有一个<Host>元素,必须至少有一个<Host>属性的名字与defaultHost指定的名字相匹配。

    属性:
    className:实现org.apache.catalina.Engine接口,默认实现类为org.apache.catalina.core.StandardEngine类;
    defaultHost:默认主机名,值必须与<Service>的name值相匹配;
    name:指定Engine的逻辑名字(必须);
    jvmRoute:在负载匀衡中使用的标识符,必须唯一;

    例如:


    1
    <Engine name="Cataline" defaultHost="localhst">
    4、<Host>元素:
    表示一个虚拟主机,为特定的虚拟主机处理所有请求。

    属性:
    appBase:设定应用程序的基目录,绝对路径或相对于%CATALINA_HOME%的路径名;
    autoDeploy:指示Tomcat运行时,如有新的WEB程序加开appBase指定的目录下,是否为自动布署,默认值为true;
    className:实现了org.apache.catalina.Host接口的类,标准实现类为org.apache.catalina.core.StandardHost类;
    deployOnStartup:Tomcat启动时,是否自动部署appBase属性指定目录下所有的WEB应用程序,默认值为true;
    name:虚拟主机的网络名(必须);

    标准Host实现类org.apahce.catalina.core.StandardHost支持的附加属性:
    deployXML:为false将不会解析WEB应用程序内部的context.xml,默认值为true;
    unPackWARs:虚拟主机指定临时读写使用的目录的路径名,不设,Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;

    例如:


    1
    <Host name="localhst" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    配置虚拟主机:


    1

    2

    3
    <Hostname="xxx" appBase="/test">
        <Contentpath=" " docBase="www/"/>
    </Hostname>
    5、<context>元素:
    一个WEB应用程序,处理当前WEB应用程序的所有请求,每一个<Context>必须使用唯一的上下文路径。

    属性:
    className:实现了org.apache.catalina.Context接口的类,标准实现类org.apache.catalina.core.StandardContext类;
    cookies:是否将Cookie应用于Session,默认值为true;
    crossContext:是否允许跨域访问,为true时,在程序内调用ServletContext.getContext()方法将返回一个虚拟主机上其它web程序的请求调度器;默认值为false,调 径用getContext()返回为null;
    docBase:绝对路径或相对于Host的appBase 属性的相对路径;
    privileged:为true,允许Web应用程序使用容器的Servlet;
    path:指定上下文路径。一个虚拟主机中,上下文路径必须唯一;
    reloadable:为true,Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用程序。虽方便,但开销也大,默认值为false,我们在调用可以打开,发布后再关闭;
    cacheMaxSize:静态资源缓存最大值,以KB为单位,默认值为10240KB;
    cachingAllowed:是否允许静态资源缓存,默认为true;
    caseSensitive:默认为true,资源文件名大小写敏感,如果为false大小写不敏感;
    unpackWAR:默认为true;
    workDir:为WEB应用程序内部的Servlet指定临时读写的目录路径名。如没有设置,则Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;

    一个 server 有一个 service,一个 service 里有多个 connector 和一个 engine,不同的 connector 除了端口可能不同,协议也可能不同。多个connector 对应一个 engine。engine 代表我们应用程序的容器。一个 engine 中有一个到多个 host,一个host 代表我们的一个虚拟主机。host 里又有一个到多个 context,一个 context 代表了一个应用程序的虚拟子站点。

    四、tomcat-users.xml

    关于用户角色、管理员的信息都在这个配置文件中。登录用户默认是注释掉的,把 <!–  –>去掉才能生效。改文件已经在《Tomcat Manager用户配置详解》文章中,做了详细的说明与配置,这里就不在重复了。
    ---------------------
    作者:huchangxi
    来源:CSDN
    原文:https://blog.csdn.net/qq_29028175/article/details/53363738
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    06 Python类、对象
    05 Python DNS域名轮询业务监控
    04 Python字符串
    03 Python函数
    02 Python循环
    执行config文件时,config.log中报错xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does not exist, use xcode-select to change
    浏览我的php网页时,出现的都是网页的代码
    php
    [转载]用c写PHP的扩展接口(php5,c++)
    PHP扩展编写示例
  • 原文地址:https://www.cnblogs.com/A121/p/10382564.html
Copyright © 2020-2023  润新知