栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

tomcat之源码分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

tomcat之源码分析

catalina就是Tomcat服务器使用的 Apache实现的servlet容器的名字。
Tomcat的核心分为3个部分:

Web容器:处理静态页面。catalina:一个处理servlet的容器。JSP容器:把jsp页面翻译成一般的servlet。 Catalina


连接器负责将一个请求与容器相连。工作包括为它接收到的每个HTTP请求创建一个request对象和一个response对象。然后将处理过程交给容器。容器从连接器中接收到request对象和response对象,并负责调用相应的servlet的service方法。

Catalina是个相关的接口:Pipeline、Value、ValueContext、Container。

http1.1新特性 持久连接

块编码


状态码100的使用

Servlet容器


Tomcat 的Servlet容器必须实现 Container接口。

Container架构分析


Container中servlet容器包括4种类型的容器,其概念层次分别是:

Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine。Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点。Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件。可以包含一个或者多个子容器Wrapper实例作为其子容器。Wrapper:每一Wrapper封装着一个Servlet。
每个概念层次都通过接口表示,均实现于接口container。其标准实现分别是StandardHost、StandardEngine、EngineContext以及ContextWrapper。

每个层次的容器是通过pipeline实现链条上任务的调用。每个链条上的节点也就是具体的任务是通过阀Value表示的。pipeline是通过ValueContext接口保证其所有阀 & 基础阀 被调用一次。

每个阀选择是否实现contained接口。该接口的实现类可以通过接口中的方法至多跟一个servlet容器相关联。

下面找一个Tomcat的文件目录对照一下,如下图所示:

Context和Host的区别是Context表示一个应用,我们的Tomcat中默认的配置下webapps下的每一个文件夹目录都是一个Context,其中ROOT目录中存放着主应用,其他目录存放着子应用,而整个webapps就是一个Host站点。

我们访问应用Context的时候,如果是ROOT下的则直接使用域名就可以访问,例如:www.ledouit.com,如果是Host(webapps)下的其他应用,则可以使用www.ledouit.com/docs进行访问,当然默认指定的根应用(ROOT)是可以进行设定的,只不过Host站点下默认的主营用是ROOT目录下的。

责任链模式

Container处理请求是使用Pipeline-Valve管道来处理的!(Valve是阀门之意)。
Pipeline-Valve使用的责任链模式和普通的责任链模式有些不同!区别主要有以下两点:

每个Pipeline都有特定的Valve,而且是在管道的最后一个执行,这个Valve叫做basevalve,basevalve是不可删除的。在上层容器的管道的basevalve中会调用下层容器的管道。

我们知道Container包含四个子容器,而这四个子容器对应的basevalve分别在:StandardEnginevalve、StandardHostValve、StandardContextValve、StandardWrapperValve。

Pipeline的处理流程图如下(图D):

Connector在接收到请求后会首先调用最顶层容器的Pipeline来处理,这里的最顶层容器的Pipeline就是EnginePipeline(Engine的管道)。在Engine的管道中依次会执行Enginevalve1、Enginevalve2等等,最后会执行StandardEnginevalve,在StandardEnginevalve中会调用Host管道,然后再依次执行Host的HostValve1、HostValve2等,最后在执行StandardHostValve,然后再依次调用Context的管道和Wrapper的管道,最后执行到StandardWrapperValve。当执行到StandardWrapperValve的时候,会在StandardWrapperValve中创建FilterChain,并调用其doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理。当所有的Pipeline-Valve都执行完之后,并且处理完了具体的请求,这个时候就可以将返回的结果交给Connector了,Connector在通过Socket的方式将结果返回给客户端。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号