博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tomcat各个组件功能
阅读量:7080 次
发布时间:2019-06-28

本文共 1844 字,大约阅读时间需要 6 分钟。

hot3.png

在此输入图片描述 Server提供一个接口,由1至多个Service组成,让其它程序可以访问到这个Service集合,同时维护各个Service的生命周期,包括如何初始化,如何结束服务,如何找到别人请求的服务。

Service又由1-n个Connector及单个Container组成,只是在Container和Connector外多包了一层,提供各种服务

Connector组件是可选择替换的,负责接收浏览器发过来的TCP连接请求,创建Request/Response,分配线程,将创建的对象传递给Container来处理请求

Container是容器的父接口,由四个容器组成,分别是Engine,Host,Context,Wrapper。其中Engine包含Host,Host包含Context,Content包含Wrapper,一个Servlet class对应一个Wrapper

Engine容器是作为顶级Container组件来设计的,表示整个 Catalina 的 servlet 引擎。由Host组成,其作用相当于一个Container的门面。有了Engine,请求的处理过程变为:浏览器发出请求,Connector接受请求,将请求交由Container(这里是Engine)处理,Container(Engine来担当)查找请求对应的Host并将请求传递给它,Host拿到请求后查找相应的应用上下文环境,准备servlet环境并调用service方法。

Host容器是Engine的子容器,表示一个拥有数个上下文的虚拟主机。一个Host在Engine中代表一个虚拟主机,这个主机可以运行多个应用,他负责安装和展开这些应用,并且标识这个应用,以便能够区分他们。它的子容器通常是Context,他除了关联子容器外,还保存一个主机应有的信息。Host不是必需的,但是要运行war程序,就必须要使用Host,因为在war中必有web.xml文件,这个文件解析就需要Host,如果有多个Host就需要定义一个top容器Engine,而Engine没有父容器,一个Engine就代表一个完整的Servlet引擎

Context代表Servlet的Context,表示一个 Web 应用,一个 context 包含一个或多个wrapper。它具备Servlet运行的基本环境,理论上只要有Context就能运行Servlet,简单的Tomcat可以没有Engine和Host。其最重要的功能就是管理Servlet实例,Servlet实例在Context中是以Wrapper出现的。

Wrapper代表一个Servlet,它负责管理Servlet,包括装载,初始化,执行以及资源回收。它是最底层的容器。

服务器接口 org.apache.catalina.Server 生命周期接口 org.apache.catalina.Lifecycle 监听并接收请求 org.apache.catalina.connector.Connector 处理请求 org.apache.catalina.Container Web应用 org.apache.catalina.Context(继承了Container) 虚拟主机 org.apache.catalina.Host(继承了Container) 服务接口 org.apache.catalina.Service servlet引擎 org.apache.catalina.Engine

对于Tomcat服务器来说,除了Server代表它自己以外,其它组件都是功能组件,都有其职责范围。Service为最顶层的组件,可以添加Connector和Container组件。Engine是Container的最顶层组件,可以添加Host组件,但不能添加父组件。Host组件的父组件是Engine,Host下面包含有Context组件。

浏览器发出请求,Connector接受请求,将请求交由Container处理,Container查找请求对应的Host并将请求传递给它,Host拿到请求后查找相应的应用上下文环境,准备servlet环境并调用service方法。

组件的生命周期由包含它的父组件控制,所以调用组件的start方法也就是调用其包含的子组件的start方法

转载于:https://my.oschina.net/aptx4869/blog/378545

你可能感兴趣的文章
05-k8s-fannel
查看>>
冷饭热炒-谈DOS和DDOS***
查看>>
ntop的安装与使用
查看>>
ES Java API_基于bulk实现多4S店销售数据批量上传
查看>>
React Native 相关技术分析资料汇总
查看>>
是否有必要使用外键?为什么不用外键?
查看>>
Nginx性能监控与调优
查看>>
我的友情链接
查看>>
2012-11-04 作业
查看>>
第四章 []运算符的本质
查看>>
js的window.open() 用法与参数
查看>>
我的“检索数据及相关分页代码
查看>>
我的友情链接
查看>>
CentOS7 上搭建多节点 Elasticsearch集群
查看>>
开源 java CMS - FreeCMS2.8 移动app生成信息数据
查看>>
C#窗体设计学习记录
查看>>
正则表达式控制文本输入
查看>>
socket学习
查看>>
【程序员小助手】免费获得WebStorm正式版
查看>>
Radius认证服务器的配置与应用(802.1x)
查看>>