因为最近在做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文件具体内容:

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协议。 本文暂且讨论到此,具体的连接器内容下回。。。