Tomcat工作流程(一)

1Tomcat是什么

Tomcat是一个应用服务器。可以运行按照J2EE中的Servlet规范编写好的Java程序,简单的说它是一个Web网站的

运行容器,把你写好的网站放进去就可以运行。

2Tomcat的体系结构

 

<!--

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请求的过程:

设置一个来自客户端URLhttp://localhost:8080/test/index.jsp

1. 用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。

2. Connector把该请求交给它所在的ServiceEngine来处理,并等待Engine的回应。

3. Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host

4. Engine匹配到名为localhostHost(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhostHost获得请求/test/index.jsp,匹配它所拥有的所有的ContextHost匹配到路径为/testContext(如果匹配不到就把该请求交给路径名为“ ”Context去处理)。

5. path=“/test”Context获得请求/index.jsp,在它的mapping table中寻找出对应的ServletContext匹配到URL PATTERN为*.jspServlet,对应于JspServlet类。

6. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServletdoGet()或doPost().执行业务逻辑、数据存储等程序。

7. Context把执行完之后的HttpServletResponse对象返回给Host

8. HostHttpServletResponse对象返回给Engine

9. EngineHttpServletResponse对象返回Connector 10ConnectorHttpServletResponse对象返回给客户Browser

4Connector分析

Connector如何接受请求的?

Connector最底层使用的是Socket来进行连接的,RequestResponse是按照HTTP协议来封装的。Connector就是使用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型,比如:Http11Protocol使用的是普通Socket来连接的,Http11NioProtocol使用的是NioSocket来连接的。其中ProtocolHandler由包含了三个部件:EndpointProcessorAdapter

1. Endpoint用来处理底层Socket的网络连接,

2. Processor Processor用于将Endpoint接收到的Socket封装成Request

3. Adapter用于将Request交给Container进行具体的处理。

5,总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值