zoukankan      html  css  js  c++  java
  • Apache Tomcat6 之连接器学习整理(1)

      因为最近在做java web的开发,用的是Apache Tomcat6+MySql+javaBean,相对于MySql和javaBean来说,Tomcat就陌生了许多,因此花了一点时间看了一下Tomcat的相关资料。趁着机会,把它整理一下(如果认识有错误或不当的地方,希望您能指出来,谢谢)。

      首先说一下Tomcat的架构(Tomcat部署在本地),首先问一个问题,为什么当我们敲下一个URL地址的时候,浏览器会返回来我们想要的页面呢?我们以一个具体的例子来分析说明:比如我们敲的是 http://localhost:8080/koups;那么Tomcat服务器就会用它的嵌套组件来解析这个URL地址,首先,使用Service组件和Coyote Connector组件(监听8080端口)来解析协议:(http://)并将获得的请求交给Engine组件来处理,然后使用Engine引擎来解析一个虚拟主机名(localhost),虚拟主机(localhost)会和Host组件相匹配,若匹配成功,Context组件会和URL中配置的Web应用内容koups相匹配,Web应用程序Koups用来处理请求,它的内容信息存储在一个内容描述文件中。控制Web应用程序的Context组件利用定义在配置文件Web.xml中的<servlet-mapping>来将执行一个匹配操作,此时,由于后面再无其他内容,应用程序默认调用index.*文件,否则将去Web.xml中匹配相应的Servlet组件,Servlet组件最终会执行URL请求。

      以上描述中牵扯到两个核心文件:servlet.xml和web.xml,我们再来看一段servlet.xml文件具体内容:

    View Code
     1 <?xml version='1.0' encoding='utf-8'?>
     2 <Server port="8005" shutdown="SHUTDOWN">
     3 
     4   <!--APR library loader. Documentation at /docs/apr.html -->
     5   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
     6   <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
     7   <Listener className="org.apache.catalina.core.JasperListener" />
     8   <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->
     9   <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
    10   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    11 
    12   <!-- Global JNDI resources
    13        Documentation at /docs/jndi-resources-howto.html
    14   -->
    15   <GlobalNamingResources>
    16     <!-- Editable user database that can also be used by
    17          UserDatabaseRealm to authenticate users
    18     -->
    19     <Resource name="UserDatabase" auth="Container"
    20               type="org.apache.catalina.UserDatabase"
    21               description="User database that can be updated and saved"
    22               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
    23               pathname="conf/tomcat-users.xml" />
    24   </GlobalNamingResources>
    25 
    26 
    27   <Service name="Catalina">   
    28     <Connector port="8080" protocol="HTTP/1.1" 
    29                connectionTimeout="20000" 
    30                redirectPort="8443" />  
    31     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    32     <Engine name="Catalina" defaultHost="localhost"> 
    33       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    34              resourceName="UserDatabase"/>
    35       <Host name="localhost"  appBase="webapps"
    36             unpackWARs="true" autoDeploy="true"
    37             xmlValidation="false" xmlNamespaceAware="false">
    38         <Context path="" docBase="koups" debug="0"/>
    39         
    40       </Host> 
    41     </Engine>
    42   </Service>
    43 </Server>

      在上面的文件中,里面包括了Service.Connector. Engine.Host. Context等关键组件,在连接器组件(Connector)中包括两类,一类是ajp连接器,一类是HTTP连接器,这两种连接器分别代表Tomcat不同的运行模式:当Tomcat作为应用服务器时,它会处理jsp和servlet请求,但是静态内容提供一般由Apache或者IIS来提供,Tomca和Apache通信时,就需要使用ajp协议(此种方式暂且不讨论);当Tomcat在单机模式下运行时,Tomcat需要处理所有的页面请求,包括jsp.servlet和静态内容,此时他就需要HTTP协议。 本文暂且讨论到此,具体的连接器内容下回。。。

      

      

  • 相关阅读:
    Java模拟ATM运行过程(第一版)
    双色Hanoi塔问题及判断指令
    一点编程风格
    游戏程序员养成计划
    OGRE编译
    Python学习收藏
    case 语句注意
    [c、c++]宏中"#"和"##"的用法(zz)
    网络代码平台tortoise svn+google code
    使用delegate进行解耦
  • 原文地址:https://www.cnblogs.com/benshan/p/2458502.html
Copyright © 2011-2022 走看看