A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1,Tomcat是什么
Tomcat是一个应用服务器。可以运行按照J2EE中的Servlet规范编写好的Java程序,简单的说它是一个Web网站的
运行容器,把你写好的网站放进去就可以运行。

2,Tomcat的体系结构

<!--
1,Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个
Service,用于具体提供服务.
这会让Tomcat启动一个server实例(即一个JVM),各Server的定义不能使用同一个端口,这意味着如果在同一个
物理机上启动了多个Server实例,必须配置它们使用不同的端口。
-->
<Server port="8005" shutdown="SHUTDOWN">

<!--
2,Service组件:
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交
将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器。
-->
<Service name="Catalina">
<!--
3,Connector组件:
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个
引擎可以有一个或多个连接器,以适应多种请求方式。
一般说来,常见于server.xml中的连接器类型通常有4种:
1) HTTP连接器 2) SSL连接器 3) AJP 1.3连接器 4) proxy连接器
默认情况下tomcat在8080端口上,默认处理的协议方式是HTTP1.1
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--
4,Engine组件:
Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要
defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件。如前面示例中定义的:
-->
<Engine name="Catalina" defaultHost="localhost">


<!--
5,Host组件:
位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面示例中的定义:
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">


<!--
6、Context组件:
Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序;如下
面的定义:
-->
<Host name="www.itheima.com" appBase="d:/itheima">
<Context path="/bbs" docBase="d:/itheima/bbs"/>
</Host>


3,处理请求过程
现在我来模拟Tomcat处理一个Http请求的过程:
设置一个来自客户端URL:http://localhost:8080/test/index.jsp
1. 用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。
2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
3. Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。
4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该
Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host
匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。
5. path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到
URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
6. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或
doPost().执行业务逻辑、数据存储等程序。
7. Context把执行完之后的HttpServletResponse对象返回给Host。
8. Host把HttpServletResponse对象返回给Engine。
9. Engine把HttpServletResponse对象返回Connector。 10、Connector把HttpServletResponse对象返回给客
户Browser。
4,Connector分析

Connector如何接受请求的?
Connector最底层使用的是Socket来进行连接的,Request和Response是按照HTTP协议来封装的。Connector就
是使用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型,比如:Http11Protocol使
用的是普通Socket来连接的,Http11NioProtocol使用的是NioSocket来连接的。其中ProtocolHandler由包含了三
个部件:Endpoint、Processor、Adapter。
1. Endpoint用来处理底层Socket的网络连接,
2. Processor Processor用于将Endpoint接收到的Socket封装成Request
3. Adapter用于将Request交给Container进行具体的处理。

5,总结
tomcat是一个web应用容器,可以运行各种web应用
tomcat分了多层,每层有各种独立的功能处理,其中Connector就是处理网络连接协议的
tomcat底层使用处理TCP连接,然后支持各种协议,比如HTTP,NIO,BIO




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马