设为首页 收藏本站
查看: 542|回复: 0

[经验分享] Tomcat之server.xml分析

[复制链接]

尚未签到

发表于 2017-1-24 09:08:49 | 显示全部楼层 |阅读模式
  1 - Tomcat Server的组成部分


  
1.1 - Server

  A Server element represents the entire Catalina servlet container. (Singleton)
  1.2 - Service

  A Service element represents the combination of one or more Connector components that share a single Engine

Service是这样一个集合:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求
  1.3 - Connector

  一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户

TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求

Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求

Coyote JK2 Connector 在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求
  1.4 - Engine

  The Engine element represents the entire request processing machinery associated with a particular Service

It receives and processes all requests from one or more Connectors

and returns the completed response to the Connector for ultimate transmission back to the client

Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名

当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理

Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理
  1.5 - Host

  代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配

每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path

当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理

匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context

所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配
  
1.6 - Context

  一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成

Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类

当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类

如果找到,则执行该类,获得请求的回应,并返回
  


  2 - Tomcat Server的结构图



 
DSC0000.gif
  该文件描述了如何启动Tomcat Server

DSC0001.gif
<Server>

    <Listener />

    <GlobaNamingResources>

    </GlobaNamingResources

    <Service>

        <Connector />

        <Engine>

            <Logger />

            <Realm />

               <host>

                   <Logger />

                   <Context />

               </host>

        </Engine>

    </Service>

</Server>

 
  元素名


  属性


  解释


  server


  port


  指定一个端口,这个端口负责监听关闭tomcat的请求


  shutdown


  指定向端口发送的命令字符串


  service


  name


  指定service的名字


  Connector(表示客户端和service之间的连接)


  port


  指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求


  minProcessors


  服务器启动时创建的处理请求的线程数


  maxProcessors


  最大可以创建的处理请求的线程数


  enableLookups


  如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址


  redirectPort


  指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号


  acceptCount


  指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理


  connectionTimeout


  指定超时的时间数(以毫秒为单位)


  Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求)


  defaultHost


  指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的


  Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)


  docBase


  应用程序的路径或者是WAR文件存放的路径


  path


  表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****


  reloadable


  这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序


  host(表示一个虚拟主机)


  name


  指定主机名


  appBase


  应用程序基本目录,即存放应用程序的目录


  unpackWARs


  如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序


  Logger(表示日志,调试和错误信息)


  className


  指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口


  prefix


  指定log文件的前缀


  suffix


  指定log文件的后缀


  timestamp


  如果为true,则log文件名中要加入时间,如下例:localhost_log.001-10-04.txt


  Realm(表示存放用户名,密码及role的数据库)


  className


  指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口


  Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)


  className


  指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息


  directory


  指定log文件存放的位置


  pattern


  有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多


  <Server>元素

它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个<Service>元素.并且它不能做为任何元素的子元素.
  <!-- 一个“Server”是一个提供完整的JVM的独立组件,它可以包含一个或多个

     “Service”实例。服务器在指定的端口上监听shutdown命令。

     

     注意:一个“Server”自身不是一个“Container”(容器),因此在这里你

     不可以定义诸如“Valves”或者“Loggers”子组件

-->


<!-- 启动Server

     在端口8005处等待关闭命令

     如果接受到"SHUTDOWN"字符串则关闭服务器

     -->


  

测试:

 telnet localhost 8005   

输入:SHUTDOWN

结果:关闭tomcat


<Server port="8005" shutdown="SHUTDOWN" debug="0">
  1>className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer

2>port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.

3>shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置
  <Service>元素

该元素由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素


<!-- 一个“Service”是一个或多个共用一个单独“Container”(容器)的“Connectors”

       组合(因此,应用程序在容器中可见)。通常,这个容器是一个“Engine”

       (引擎),但这不是必须的。

       

       注意:一个“Service”自身不是一个容器,因此,在这个级别上你不可定义

       诸如“Valves”或“Loggers”子组件。

  -->


<!-- Tomcat的Standalone Service

Service是一组Connector的集合

它们共用一个Engine来处理所有Connector收到的请求

-->
  

   <Service name="Catalina">

   <Service name="Apache">

   第一个<Service>处理所有直接由Tomcat服务器接收的web客户请求.

   第二个<Service>处理所有由Apahce服务器转发过来的Web客户请求 .
  1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService

2>name定义Service的名字
  <Connector>元素

由Connector接口定义.<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果. 


<!-- 一个“Connector”(连接器)代表一个请求被接收和应答所需要的端点。每个连

         接器通过相关的“Container”(容器)处理请求。

         

         默认情况下,一个非SSL的HTTP/1.1的连接器被绑定在端口8080。你也可以通过

         根据后面的使用说明并取消第二个连接器入口的注释,在端口8443上建立一个

         SSL HTTP/1.1的连接器。开放SSL支持需要下面几步(参见Tomcat 5文档中怎样

         配置SSL的说明以取得更多的详细信息):

         * 如果你的JDK是1.3或1.3以前的版本,下载安装JSSE 1.0.2或以后版本,并放

           置JAR文件到“$JAVA_HOME/jre/lib/ext”目录下。

         * 带一个“changeit”的口令值执行:

             %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)

             $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (UNIX)

           来生成它自己的证书私钥。

           

         默认情况下,当一个web应用程序调用请求时,DNS查询是可行的。这将对性能造

         成一些不利的影响,因此,你可以将“enableLookups”设置为“false”来关闭DNS

         查询。当DNS查询被关闭时,request.getRemoteHost()将返回包含远程客户IP地

         址的字符串。

  -->


<!-- Coyote HTTP/1.1 Connector

className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector

port : 在端口号8080处侦听来自客户browser的HTTP1.1请求.如果把8080改成80,则只要输入 http://localhost/
即可

    protocol:设定Http协议,默认值为HTTP/1.1

minSpareThreads: 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责

maxSpareThread:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200

    acceptCount : 当现有线程已经达到最大数75时,为客户请求排队.当队列中请求数超过100时,后来的请求返回Connection refused错误

redirectport : 当客户请求是https时,把该请求转发到端口8443去

   enableLookups:如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true

   connectionTimeout:定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间



其它属性略

-->
  


<Connector port="8080" maxThread="50"
minSpareThreads="25" maxSpareThread="75" enableLookups="false"
redirectPort="8443" acceptCount="100" debug="0"
connectionTimeout="20000" disableUploadTimeout="true" />
  <Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />

第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.
  

<Engine>元素

每个Service元素只能有一个Engine元素.处理在同一个<Service>中所有<Connector>元素接收到的客户请求.由org.apahce.catalina.Engine接口定义. 


<!-- 一个“Engine”(引擎)代表处理每个请求的入口点(在Catalina内)。这个Tomcat

         的标准独立引擎实现分析包含在请求中的HTTP头信息,并将请求传送到适当的主机

         或虚拟主机上。-->



<!-- Engine用来处理Connector收到的Http请求

         它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理

         默认虚拟主机是localhost

         -->



  <Engine name="Catalina" defaultHost="localhost" debug="0">
  1>className指定实现Engine接口的类,默认值为StandardEngine

2>defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机

3>name定义Engine的名字
  在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>
  <Host>元素

它由Host接口定义.一个Engine元素可以包含多个<Host>元素.每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.
  <!-- 定义默认的虚拟主机

           注意:XML模式确认将不能与Xerces 2.2同工作。

      -->



<!-- 虚拟主机localhost

           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没有相应的<Context>元素,将采用Tomcat默认的Context






           -->


  

<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
  在<Host>元素中可以包含如下子元素

<Logger>, <Realm>, <Value>, <Context>
  
<Context>元素

它由Context接口定义.是使用最频繁的元素.每个<Context元素代表了运行在虚拟主机上的单个Web应用.一个<Host>可以包含多个<Context>元素.每个web应用有唯一

的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个


<!-- Context,对应于一个Web App

             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


             -->


  <Context path="" docBase="mycontext" debug="0"/>



Tomcat Server处理一个http请求的过程
假设来自客户的请求为:

http://localhost:8080/wsota/wsota_index.jsp


1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应

3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host

4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)

5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context

6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)

7) path="/wsota"的Context获得请求/wsota_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对象返回给客户browser

  
3 - 配置文件$CATALINA_HOME/conf/server.xml的说明



该文件描述了如何启动Tomcat Server
  

<!----------------------------------------------------------------------------------------------->
  

<!-- 启动Server

     在端口8005处等待关闭命令

     如果接受到"SHUTDOWN"字符串则关闭服务器

     -->
  <Server port="8005" shutdown="SHUTDOWN" debug="0">
  

  <!-- Listener ???

       目前没有看到这里

       -->
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>

  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
  

  <!-- Global JNDI resources ???

       目前没有看到这里,先略去

       -->
  <GlobalNamingResources>

    ... ... ... ...

  </GlobalNamingResources>
  <!-- Tomcat的Standalone Service

       Service是一组Connector的集合

       它们共用一个Engine来处理所有Connector收到的请求

       -->
  <Service name="Tomcat-Standalone">
  

    <!-- Coyote HTTP/1.1 Connector

         className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector

         port : 在端口号8080处侦听来自客户browser的HTTP1.1请求

         minProcessors : 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责

         maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求

         acceptCount : 当现有线程已经达到最大数75时,为客户请求排队

                       当队列中请求数超过100时,后来的请求返回Connection refused错误

         redirectport : 当客户请求是https时,把该请求转发到端口8443去

         其它属性略

         -->
  <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

               port="8080"

               minProcessors="5" maxProcessors="75" acceptCount="100"

               enableLookups="true"

               redirectPort="8443"

               debug="0"

               connectionTimeout="20000"

               useURIValidationHack="false"

               disableUploadTimeout="true" />
  

    <!-- Engine用来处理Connector收到的Http请求

         它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理

         默认虚拟主机是localhost

         -->
  <Engine name="Standalone" defaultHost="localhost" debug="0">
  <!-- 日志类,目前没有看到,略去先 -->
  <Logger className="org.apache.catalina.logger.FileLogger" .../>
  <!-- Realm,目前没有看到,略去先 -->
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>
  

      <!-- 虚拟主机localhost

           appBase : 该虚拟主机的根目录是webapps/

           它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理

           -->
  <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <!-- 日志类,目前没有看到,略去先 -->
  <Logger className="org.apache.catalina.logger.FileLogger" .../>
  <!-- Context,对应于一个Web App

             path : 该Context的路径名是"",故该Context是该Host的默认Context

             docBase : 该Context的根目录是webapps/mycontext/

             -->
  <Context path="" docBase="mycontext" debug="0"/>
  <!-- 另外一个Context,路径名是/wsota -->
  <Context path="/wsota" docBase="wsotaProject" debug="0"/>

            

       

      </Host>

     

    </Engine>
  </Service>
  </Server>
  

<!----------------------------------------------------------------------------------------------->
  4 - Context的部署配置文件web.xml的说明


  

一个Context对应于一个Web App,每个Web App是由一个或者多个servlet组成的

当一个Web App被初始化的时候,它将用自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类

它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类

然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类

web.xml文件有两部分:servlet类定义和servlet映射定义

每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN对应

当该Context获得请求时,将查询mapping table,找到被请求的servlet,并执行以获得请求回应
  

  分析一下所有的Context共享的web.xml文件,在其中定义的servlet被所有的Web App载入
  

<!----------------------------------------------------------------------------------------------->
  

<web-app>
  

  <!-- 概述:

       该文件是所有的WEB APP共用的部署配置文件,

       每当一个WEB APP被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml

       -->
  <!--  +-------------------------+  -->

  <!--  |    servlet类定义部分    |  -->

  <!--  +-------------------------+  -->
  <!-- DefaultServlet

       当用户的HTTP请求无法匹配任何一个servlet的时候,该servlet被执行

       URL PATTERN MAPPING : /

       -->
  <servlet>

        <servlet-name>default</servlet-name>

        <servlet-class>

          org.apache.catalina.servlets.DefaultServlet

        </servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <init-param>

            <param-name>listings</param-name>

            <param-value>true</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>
  

  <!-- InvokerServlet

       处理一个WEB APP中的匿名servlet

       当一个servlet被编写并编译放入/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候

       该servlet被调用,把匿名servlet映射成/servlet/ClassName的形式

       URL PATTERN MAPPING : /servlet/*

       -->
  <servlet>

        <servlet-name>invoker</servlet-name>

        <servlet-class>

          org.apache.catalina.servlets.InvokerServlet

        </servlet-class>

        <init-param>

            <param-name>debug</param-name>

            <param-value>0</param-value>

        </init-param>

        <load-on-startup>2</load-on-startup>

    </servlet>
  

  <!-- JspServlet

       当请求的是一个JSP页面的时候(*.jsp)该servlet被调用

       它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行

       URL PATTERN MAPPING : *.jsp

       -->
  <servlet>

        <servlet-name>jsp</servlet-name>

        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

        <init-param>

            <param-name>logVerbosityLevel</param-name>

            <param-value>WARNING</param-value>

        </init-param>

        <load-on-startup>3</load-on-startup>

    </servlet>
  <!--  +---------------------------+  -->

  <!--  |    servlet映射定义部分    |  -->

  <!--  +---------------------------+  -->
  

    <servlet-mapping>

        <servlet-name>default</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>
  <servlet-mapping>

        <servlet-name>invoker</servlet-name>

        <url-pattern>/servlet/*</url-pattern>

    </servlet-mapping>
  <servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jsp</url-pattern>

    </servlet-mapping>
  

  <!--  +------------------------+  -->

  <!--  |    其它部分,略去先    |  -->

  <!--  +------------------------+  -->
  ... ... ... ...
  </web-app>
  

<!----------------------------------------------------------------------------------------------->
  5 - Tomcat Server处理一个http请求的过程


  

假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp

  1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
  2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
  3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
  4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
  5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
  6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
  7) path="/wsota"的Context获得请求/wsota_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对象返回给客户browser

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332699-1-1.html 上篇帖子: tomcat 配置相关 (以tomcat 6.0为例) 下篇帖子: The distinguish between Tomcat 5.x and Tomcat 6.x~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表