"tomcat启动分析"文章读后笔记

来源:百度文库 编辑:神马文学网 时间:2024/04/29 21:34:30
"tomcat启动分析"文章读后笔记
Posted on 2006-12-22 09:20daniel-shen 阅读(35)评论(0)  编辑收藏 所属分类:java
1.2 - Service
service 由一个或多个connector组成,一个engine,负责处理所有connector获得的客户请求
1.3 - Connector
tomcat 的典型connector有两个,一个是在断口8080的侦听浏览器的http请求,一个是在断口8009侦听其他webserver的servlet/jsp代理请求
1.4 - Engine
engine可以配置多哥虚拟主机virtual host,每个虚拟主机都有一个域名,当engine获得一个请求是,它把请求匹配到一个host上,engine有一个虚拟主机
1.5 - Host
每个虚拟主机都可以部署一个或多个web应用,每个web应用对应一个context,有一个contextpath,当host获得一个请求时,将把该请求匹配到某个context上,让后把该请求交给该context来处理,方法是"最长匹配",所以一个path==""的context将成为该虚拟主机的默认context,所有无法和其他context的路径名匹配的请求都最终和该默认context匹配.
1.6 - Context
一个context对应一个web应用,由一个或者多哥servlet组成,context在创建的时候将根据配置文件$catalina_home/conf/web.xml和$webapp_home/web-inf/web.xml载入servlet类,当context获得请求时,将在自己的映射表中寻找匹配的servlet类,若找到,则执行该类,获得回应,返回.
2 - Tomcat Server的结构图

3 - 配置文件$CATALINA_HOME/conf/server.xml的说明
该文件描述了如何启动Tomcat 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载入
defaultorg.apache.catalina.servlets.DefaultServletdebug0listingstrue1invokerorg.apache.catalina.servlets.InvokerServletdebug02jsporg.apache.jasper.servlet.JspServletlogVerbosityLevelWARNING3default/invoker/servlet/*jsp*.jsp... ... ... ...
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