文档章节

Tomcat 框架

AaronSheng
 AaronSheng
发布于 2016/11/28 19:31
字数 774
阅读 32
收藏 0

Tomcat整体框架:


Server:
Server是Service的生存环境。一个Server中可以有多个Service。

Service:
Service将Connector和Container包装在一起提供对外服务,一个Service可以有多个Connector,但是只有一个Container。

Connector:
Connector负责对外交流。它的主要任务是负责接收浏览器的发过来的tcp连接请求,创建一个Request和Response对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的Request 和Response对象传给处理这个请求的线程,处理这个请求的线程就是Container组件要做的事了。
Connector中网络事件的是ProtocolHandler,每个ProtocolHandler都有一个EndPoint,EndPoint则代表具体的端口监听模式,像BIO, NIO,ProtocolHandler接收来自EndPoint的事件,并交给Container处理。

Container:
Container负责处理Connector传过来的请求。
Container是容器的父接口,所有子容器都必须实现这个接口,Container容器的设计用的是典型的责任链的设计模式,它有四个子容器组件构成,分别是:Engine、Host、Context、Wrapper,这四个组件不是平行的,而是父子关系,Engine包含Host,Host包含 Context,Context包含Wrapper。通常一个Servlet class对应一个Wrapper,如果有多个Servlet就可以定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container了,如Context。
Container中都包含一个Pipeline,Pipeline则像是一个事件处理管道,上面有很多时间处理程序,Container接收到事件后,分别调用Pipeline上的Valve去处理,每一个上一层Container的Pipeline上都有一个指向下一层Container的Valve,从而做到了事件从上层Container传到下层。

a) Engine是完整的容器,其下面拥有多个虚拟主机,它的责任就是将Connector请求分配给虚拟机处理。它的标准实现类是StandardEngine,这个类注意一点就是Engine没有父容器了,如果调用 setParent方法时将会报错。

b) Host是Engine的子容器,一个Host在Engine中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。

c) Context还可以定义在父容器Host中,Host不是必须的,但是要运行war程序,就必须要Host,因为war中必有web.xml文件,这个文件的解析就需要Host了,如果要有多个Host就要定义一个top容器Engine了。而Engine没有父容器了,一个Engine代表一个完整的Servlet引擎。

d) Wrapper代表一个Servlet,它负责管理一个Servlet,包括的Servlet的装载、初始化、执行以及资源回收。Wrapper是最底层的容器,它没有子容器了,所以调用它的addChild将会报错。

© 著作权归作者所有

AaronSheng
粉丝 14
博文 52
码字总数 51122
作品 0
深圳
程序员
私信 提问
解析TOMCAT框架

毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的。 所以得实践、实践、再实践。 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程。 如...

晨曦之光
2012/04/10
796
0
java-buildpack源码分析之Detect

Detect 该buildpack的探测的内容包含:容器,JRE,框架。具体内容在components.yml中可以看到: # Configuration for components to use in the buildpack containers:- "JavaBuildpack::Co......

wenqi_arthur
2015/10/27
19
0
tomcat6.0.x框架结构图-tomcat 6.x 源码阅读

2013-09-05 昨天搞域名,没有写blog,愧疚蛮久,还好域名搞定了...嘻嘻 继续行程,记录点滴...: tomcat6.0.x已经通过svn导入eclipse运行,接下来就是阅码之旅。,每个人阅读源码方式可能不尽相...

douglaswei
2013/09/06
1K
1
Tomcat文件上传大小限制,是tomcat限制还是JavaWeb项目限制的?

由Tomcat官方文档: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html 得知Tomcat的默认POST请求体大小为2M(maxPostSize配置) 但是一般项目都是在SpringMVC或Struts2(或其他框架...

KisChang
2015/08/18
9K
2
如何减少tomcat内存使用量?

最近有部分用户会问,为什么我的tomcat占用的内存这么高?如何才能把他减少点呢? 其实减少tomcat的内存使用量比较难,但是我们还是有一些办法的! 要想减少tomcat内存使用量,就必须对tomcat和内存...

巴顿
2016/01/06
410
3

没有更多内容

加载失败,请刷新页面

加载更多

总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
44分钟前
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
48分钟前
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0
JAVA 利用时间戳来判断TOKEN是否过期

import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;/** * @descri......

huangkejie
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部