`
smartvessel
  • 浏览: 82017 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tomcat 7 源码分析-14 tomcat的container设计

阅读更多

                 实现
container←-----containerBase
    ↑                          ↑
    |继承                    |继承
    |                          |
    |         实现           |
Engine←-----—-- StandardEngine
context               Standardcontext
host                    Standardhost
wrapper              Standardwrapper

 

四种container分别是Engine,context,host和wrapper。

containerBase是对container相同部分的实现,四个interface又继承了container,增加了不同的部分。

如此StandardEngine,Standardcontext,Standardhost和Standardwrapper继承了相同的部分,同时实现了差异性的部分。

 

Engine:An Engine is a Container that represents the entire Catalina servlet engine.

 

Host:A Host is a Container that represents a virtual host in the Catalina servlet engine.

 

Context:A Context is a Container that represents a servlet context, and therefore an individual web application, in the Catalina servlet engine.

 

Wrapper: A Wrapper is a Container that represents an individual servlet definition from the deployment descriptor of the web application.

 

补充:写了一个简单的servlet,然后跟踪下发现如下

Engine=StandardEngine[Catalina]

host=StandardEngine[Catalina].StandardHost[localhost]
context=StandardEngine[Catalina].StandardHost[localhost].StandardContext[/WelcomeServlet]
wrapper=StandardEngine[Catalina].StandardHost[localhost].StandardContext[/WelcomeServlet].StandardWrapper[com.hotnosh.ServletTest.FirstServlet]

 

可以看出:

host实际是虚拟主机

context是webapplication,发布的web应用的根目录名

wrapper是具体处理servlet的

如此我在浏览器上输入http://localhost:8080/WelcomeServlet/FisrtServlet

 

 

GET /WelcomeServlet/FisrtServlet HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
ThreadID: 4936
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SE 2.X; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; SE 2.X)
Host: localhost:8080
Connection: Keep-Alive

 

 

向tomcat发出http的request,tomcat解析请求后,一步步直到具体的servlet处理函数。

调用栈:

Http11Processor.process(SocketWrapper<Socket> socketWrapper)

adapter.service(request, response);

connector.getService().getContainer().getPipeline().getFirst().invoke(request, response);

//调用StandardEngine的StandardEngineValve.invoke

host.getPipeline().getFirst().invoke(request, response);

//调用StandardHost的StandardHostValve.invoke

context.getPipeline().getFirst().invoke(request, response);

//调用Standardcontext的StandardcontextValve.invoke

wrapper.getPipeline().getFirst().invoke(request, response);

//调用StandardWrapper的StandardWrapperValve.invoke

Http11Processor.process(SocketWrapper<Socket> socketWrapper)

adapter.service(request, response);

connector.getService().getContainer().getPipeline().getFirst().invoke(request, response);

//调用StandardEngine的StandardEngineValve.invoke

host.getPipeline().getFirst().invoke(request, response);

//调用StandardHost的StandardHostValve.invoke

context.getPipeline().getFirst().invoke(request, response);

//调用Standardcontext的StandardcontextValve.invoke

wrapper.getPipeline().getFirst().invoke(request, response);

//调用StandardWrapper的StandardWrapperValve.invoke
分享到:
评论

相关推荐

    apache-tomcat-7.0.62-src和apache-tomcat-6.0.39-src的源码

    这个压缩包包含了两个版本的Tomcat源码:apache-tomcat-7.0.62-src和apache-tomcat-6.0.39-src,这两个版本分别代表了Tomcat在不同时间点的开发状态和技术特性。 首先,让我们从Apache Tomcat 6.0.39源码开始分析。...

    tomcat6源码分析

    《Tomcat6源码分析——深入理解Web服务器的运行机制》 Tomcat6作为Apache软件基金会的Jakarta项目的一部分,是一款广泛使用的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为开发和部署...

    tomcat8源码

    Apache Tomcat 8.5.23 源码分析 Apache Tomcat 是一个开源的、免费的Web服务器和Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,是开发和部署Java Web应用的重要平台。深入理解Tomcat的源码有助...

    Tomcat6-7-8-9版本

    7. **源码分析**:深入学习Tomcat源码有助于理解其工作流程,包括请求处理、连接器(Connector)、容器(Container)架构、线程池管理、类加载机制(Class Loading)以及会话管理等核心概念。通过阅读源码,开发者...

    tomcat架构的源码分析

    ### Tomcat架构的源码分析 #### 一、Tomcat的架构概述 Tomcat作为一款广泛使用的开源Java Servlet容器,其内部架构设计简洁而高效。本文档将对Tomcat的架构进行详细介绍,并从源码层面深入分析其核心组成部分。...

    我的tomcat7源码手撕过程

    ### Tomcat7源码手撕过程详解 #### Tomcat初始化流程分析 Tomcat是一个流行的Java Servlet容器,用于部署和运行Web应用程序。理解Tomcat的工作原理对于优化应用性能、解决部署问题至关重要。以下是对Tomcat7启动...

    tomcat7源码环境搭建

    Tomcat7作为一款广泛应用的开源Java Servlet容器,其源码分析是许多开发者提升技能的重要途径。本主题主要探讨如何在本地环境中搭建Tomcat7的源码环境,以便进行源码级别的学习和调试。 【描述】:“用于Tomcat7.0...

    apache-tomcat-6.0.20-src

    Apache Tomcat 6.0.20 是一个开源的、基于Java Servlet和JavaServer Pages (JSP) ...虽然Tomcat 6.0.20已是较旧的版本,但其基本架构和设计原则在后续版本中仍然适用,因此对于学习Tomcat的原理具有很高的参考价值。

    apache-tomcat-9.0.8-src可直接导入eclipse的源码

    了解并分析Tomcat源码对于深入理解Java Web应用的部署和执行机制非常有帮助。 源码包"apache-tomcat-9.0.8-src"包含了Tomcat的所有源代码,包括核心组件、模块和服务。它由多个子目录构成,每个目录对应Tomcat的...

    tomcat7.070 源码及转成eclipse

    【标题】"Tomcat 7.0.70 源码分析与Eclipse工程转换" 在Java Web开发领域,Apache Tomcat是一个广泛使用的开源应用服务器,尤其在处理Servlet和JSP方面。Tomcat 7.0.70是7.x系列的一个版本,它包含了对Java Servlet...

    apache-tomcat-6.0.18源码

    源码分析: 1. **目录结构**:解压后的源码文件夹通常包含`bin`、`conf`、`lib`、`logs`、`webapps`、`work`等目录。`bin`存放启动和停止服务器的脚本,`conf`存储配置文件,`lib`包含运行Tomcat所需的JAR文件,`...

    apache-tomcat-5.5.25-src.tar.gz

    对于学习Java Web开发和服务器端技术的人来说,分析和研究Tomcat源码是一个很好的学习途径,可以帮助理解Web服务器的内部运作机制,提升开发技能。同时,对于运维人员来说,了解源码也有助于更好地排查和解决运行时...

    apache-tomcat-8.5.50-src.zip

    分析Tomcat请求过程 链接器(Connector)与容器(Container) 解耦 Connector设计 监听服务端口,读取来自客户端的请求 将请求数据按照指定协议进行解析 根据请求地址匹配正确的容器进行处理 将响应返回客户端 ...

    Tomcat源码研究.pdf

    ### Tomcat源码研究知识点概览 #### 1.1 Catalina.bat脚本解析 - **脚本功能**:`catalina.bat`是Tomcat启动过程中的关键脚本之一,其主要作用在于构建合适的Java命令行参数,进而启动Tomcat服务。此脚本根据环境...

    tomcat8源码的maven项目

    在这个项目中,开发者可能已经配置了相关的Maven插件和目标,以便于编译、测试和打包Tomcat源码。 【标签】: 1. **Tomcat8**:Tomcat 8是Tomcat服务器的第8个主要版本,它支持Java Servlet 3.1、JavaServer Pages...

    tomcatSourceCodeLearn:tomcat7源码学习-tomcat source code

    【标题】"Tomcat源码学习:深入理解Tomcat7" 【内容】 Tomcat作为一款广泛应用的开源Java Servlet容器,其源码对于开发者来说是一份宝贵的教育资源。通过深入学习Tomcat7的源码,我们可以更好地理解HTTP服务器的...

    tomcat源码

    在深入理解Tomcat源码之前,我们需要了解一些基础概念。 首先,Java Servlet是Java编程语言中用于扩展服务器功能的一组接口和类。它允许开发者编写可以处理HTTP请求的Java代码,从而创建动态、交互式的Web应用。...

    tomcat9源码的eclipse工程

    【描述】"这是一个Eclipse的Tomcat源码工程,适合于查看Tomcat源码"意味着你可以通过Eclipse IDE高效地探索Tomcat的内部工作原理。Eclipse作为一款强大的Java开发工具,拥有优秀的代码导航、调试和重构功能,对于...

    Tomcat原理与实战

    Tomcat的核心设计基于模块化,主要由连接器(Connector)和容器(Container)两大部分组成,这两部分共同构成了Tomcat的核心工作原理。 **1. 原理** - **概述Tomcat** Tomcat作为Servlet容器,它的主要任务是接收...

Global site tag (gtag.js) - Google Analytics