`

tomcat 启动全过程(转)

阅读更多
Tomcat启动分析

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

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 - 配置文件$CATALI


NA_HOME/conf/server.xml的说明



1<!-- 启动Server     在端口8005处等待关闭命令     如果接受到"SHUTDOWN"字符串则关闭服务器     -->
2
3<Server port="8005" shutdown="SHUTDOWN" debug="0">
4

6
7  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
8
9  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
10
11
12
13
15  <GlobalNamingResources>
16
17     
18
19  </GlobalNamingResources>
20
21
22
23  <!-- Tomcat的Standalone Service
24
25       Service是一组Connector的集合       它们共用一个Engine来处理所有Connector收到的请求     -->
26
27  <Service name="Tomcat-Standalone">
28
29    <!-- Coyote HTTP/1.1 Connector
30
31         className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector
32
33         port : 在端口号8080处侦听来自客户browser的HTTP1.1请求
34
35         minProcessors : 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责
36
37         maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求
38
39         acceptCount : 当现有线程已经达到最大数75时,为客户请求排队
40
41                       当队列中请求数超过100时,后来的请求返回Connection refused错误
42
43         redirectport : 当客户请求是https时,把该请求转发到端口8443去
44
45         其它属性略         -->
46
47    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
48
49               port="8080"          minProcessors="5"     maxProcessors="75"    acceptCount="100"
50
51               enableLookups="true" redirectPort="8443"   debug="0"     connectionTimeout="20000"
52
53               useURIValidationHack="false"                       disableUploadTimeout="true" />
54
55    <!-- Engine用来处理Connector收到的Http请求
56
57         它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理  默认虚拟主机是localhost  -->
58
59<Engine name="Standalone" defaultHost="localhost" debug="0">
60
61
63      <Logger className="org.apache.catalina.logger.FileLogger" />
64
66
67      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" />
68
69      <!-- 虚拟主机localhost
70
71           appBase : 该虚拟主机的根目录是webapps/
72
73           它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理
74
75           -->
76
77      <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">        <!-- 日志类,目前没有看到

,略去先 -->
78
79        <Logger className="org.apache.catalina.logger.FileLogger" />
80
81        <!-- Context,对应于一个Web App
82
83             path : 该Context的路径名是"",故该Context是该Host的默认Context
84
85             docBase : 该Context的根目录是webapps/mycontext/              -->
86
87        <Context path="" docBase="mycontext" debug="0"/>
88
89<!-- 另外一个Context,路径名是/wsota -->
90
91        <Context path="/wsota" docBase="wsotaProject" debug="0"/>         </Host>
92    </Engine>
93  </Service>
94</Server>
95
96





该文件描述了如何启动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载入



  1<web-app>
  2
  3  <!-- 概述:
  4
  5       该文件是所有的WEB APP共用的部署配置文件,
  6
  7       每当一个WEB APP被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml
  8
  9       -->
10
11  <!--  |    servlet类定义部分    |  -->
12
13  <!-- DefaultServlet
14
15       当用户的HTTP请求无法匹配任何一个servlet的时候,该servlet被执行
16
17       URL PATTERN MAPPING : /        -->
18
19    <servlet>
20
21        <servlet-name>default</servlet-name>
22
23        <servlet-class>
24
25          org.apache.catalina.servlets.DefaultServlet
26
27        </servlet-class>
28
29        <init-param>
30
31            <param-name>debug</param-name>
32
33            <param-value>0</param-value>
34
35        </init-param>
36
37        <init-param>
38
39            <param-name>listings</param-name>
40
41            <param-value>true</param-value>
42
43        </init-param>
44
45        <load-on-startup>1</load-on-startup>
46
47    </servlet>
48
49
50
51  <!-- InvokerServlet
52
53       处理一个WEB APP中的匿名servlet
54
55       当一个servlet被编写并编译放入/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候
56
57       该servlet被调用,把匿名servlet映射成/servlet/ClassName的形式
58
59       URL PATTERN MAPPING : /servlet/*
60
61       -->
62
63    <servlet>
64
65        <servlet-name>invoker</servlet-name>
66
67        <servlet-class>
68
69          org.apache.catalina.servlets.InvokerServlet
70
71        </servlet-class>
72
73        <init-param>
74
75            <param-name>debug</param-name>
76
77            <param-value>0</param-value>
78
79        </init-param>
80
81        <load-on-startup>2</load-on-startup>
82
83    </servlet>
84
85
86
87
88
89  <!-- JspServlet
90
91       当请求的是一个JSP页面的时候(*.jsp)该servlet被调用
92
93       它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行
94
95       URL PATTERN MAPPING : *.jsp                          -->
96
97    <servlet>
98
99        <servlet-name>jsp</servlet-name>
100
101        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
102
103        <init-param>
104
105            <param-name>logVerbosityLevel</param-name>
106
107            <param-value>WARNING</param-value>
108
109        </init-param>
110
111        <load-on-startup>3</load-on-startup>
112
113    </servlet>
114
115  <!--  |    servlet映射定义部分    |  -->
116
117    <servlet-mapping>
118
119        <servlet-name>default</servlet-name>
120
121        <url-pattern>/</url-pattern>
122
123    </servlet-mapping>
124
125    <servlet-mapping>
126
127        <servlet-name>invoker</servlet-name>
128
129        <url-pattern>/servlet/*</url-pattern>
130
131    </servlet-mapping>
132
133
134
135    <servlet-mapping>
136
137        <servlet-name>jsp</servlet-name>
138
139        <url-pattern>*.jsp</url-pattern>
140
141    </servlet-mapping>
142
143  <!--  |    其它部分,略去先    |  -->
144
145     
146
147</web-app>
148



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

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/vagrantscat/archive/2009/07/01/4311675.aspx
0
0
分享到:
评论

相关推荐

    linux 下安装jdk、tomcat、jboss

    linux 下安装jdk、tomcat、jboss 全过程包含tomcat和jboss自启动

    flex data service

    二 FDS的安装 ...5) 重新启动tomcat, 在IE上输入http://localhost/samples/ 就可以看到FDS的范例了 文章出处:file:///G:/flex%20help/Flex%20Data%20Services(FDS)安装_web技术文章_网页设计.htm

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 11.nginx的安装及启动、停止.avi │ 12.nginx的配置文件-通过端口号区分虚拟机.avi │ 13.通过域名配置虚拟机.avi │ 淘淘商城第二天笔记.docx │ ├─03.第三天 │ 01.课程回顾.avi │ 02.课程计划.avi │ 03....

    JAVA开源CMS JEECMS v3.0

    一、安装运行环境(JDK5+TOMCAT5.5+MYSQL5及以上,具体安装过程请参考本下载包中的相关说明文档); 二、将程序解压后的ROOT文件夹拷贝到tomcat安装目录下的webapps文件夹下(例如:D:\Tomcat6\webapps\),启动...

    java毕业设计之基于SpringBoot的CSGO赛事管理系统(springboot项目源码+LW+PPT+视频).zip

    一个良好的CSGO赛事管理系统可以实现对CSGO赛事信息的精细化管理:对在线CSGO赛事管理流程的全过程进行电子化操作,其主要作用是管理和控制CSGO赛事所有的信息,分析库存数据,使工作人员对CSGO赛事管理系统进行监管...

    java毕业设计之会员制医疗预约服务管理信息系统(springboot项目源码+LW+PPT+视频).zip

    一个良好的会员制医疗预约服务管理信息系统可以实现对会员制医疗预约服务的精细化管理:对在线会员制医疗预约服务管理流程的全过程进行电子化操作,其主要作用是管理和控制会员制医疗预约服务所有的信息,分析库存...

    AnyFo - EricSofa:专门用于C/S结构的网络服务器中间件

    如果,有一种C/S结构的网络中间件,独立承担网络和安全性等的处理,并且能如同Tomcat那样实现开发过程中代码的热部署,那 么,就能像Tomcat一样,为全世界的C/S结构系统的开发带来低成本,高效率和高稳定性了。...

    深入体验Java Web开发内幕

    【内容简介】  本书深刻且通俗地揭示Java Web开发内幕,使您由内而外地明白使用Java进行Web应用开发的全过程——从XML基础知识到HTTP详述及相关体验,从用Tomcat配置Web站点到HttpServletResponse和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web应用程序 194 5.7 小结 195 第6章 servlet技术 196 6.1 servlet api 196 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web应用程序 194 5.7 小结 195 第6章 servlet技术 196 6.1 servlet api 196 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web应用程序 194 5.7 小结 195 第6章 servlet技术 196 6.1 servlet api 196 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web应用程序 194 5.7 小结 195 第6章 servlet技术 196 6.1 servlet api 196 ...

    测试培训教材

    按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。就测试过程本身而言,应该包含以s下几个阶段。  -测试需求的分析和确定。  -测试计划。  -测试设计。  -测试执行。  -...

    Spring.3.x企业应用开发实战(完整版).part2

    7.10.3 在Tomcat下的配置 7.10.4 在其他Web应用服务器下的配置 7.11 小结 第3篇 数据访问 第8章 Spring对DAO的支持 8.1 Spring的DAO理念 8.2 统一的异常体系 8.2.1 Spring的DAO异常体系 8.2.2 JDBC的异常转换器 ...

    Spring3.x企业应用开发实战(完整版) part1

    7.10.3 在Tomcat下的配置 7.10.4 在其他Web应用服务器下的配置 7.11 小结 第3篇 数据访问 第8章 Spring对DAO的支持 8.1 Spring的DAO理念 8.2 统一的异常体系 8.2.1 Spring的DAO异常体系 8.2.2 JDBC的异常转换器 ...

    cms后台管理

    3.0.2-final文件夹下的root文件夹更名为jeecms拷贝到tomcat 安装目录下的webapps 文件夹下(例如: D:\Tomcat 6.0\webapps\),启动tomcat,在地址栏中输入http://localhost:8080/jeecms, 您将看到第一步安装过程中...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    1.8.1 Tomcat端口被占用导致不能启动 1.8.2 Eelipse没有创建JSP项 1.9 精彩回顾 第2章 JavaWeb开发必修课 ——JSP语法 2.1 本章学习任务 2.1.1 本章知识体系 2.1.2 实例开发任务 2.2 什么是JSP 2.2.1 JSP简介 2.2.2...

    健身房管理信息系统设计.doc

    对于基于Struts框架的Web应用程序,当客户端浏览器发出请求时,请求会被控制器 截获,并调用在Web应用启动时就加载并初始化核心控制器组件ActionServlet,然后通 过ActionServlet从Struts- config.xml文件中读取...

    Web安全深度剖析(张柄帅)

    7.3.2 全自动检测XSS 134 7.4 XSS高级利用 134 7.4.1 XSS会话劫持 135 7.4.2 XSS Framework 141 7.4.3 XSS GetShell 144 7.4.3 XSS蠕虫 149 7.5 修复XSS跨站漏洞 151 7.5.1 输入与输出 151 7.5.2 HttpOnly 158 7.6 ...

Global site tag (gtag.js) - Google Analytics