1. 首页 > 快讯

解析Tomcat内部结构和请求过程-tomcat架构解析

老铁们,大家好,相信还有很多朋友对于解析Tomcat内部结构和请求过程-tomcat架构解析和的相关问题不太懂,没关系,今天就由我来为大家分享分享解析Tomcat内部结构和请求过程-tomcat架构解析以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

概述Tomcat 是一个JSP/Servlet 容器。作为Servlet容器,它具有独立Servlet容器、进程内Servlet容器和进程外Servlet容器三种工作模式。

Tomcat的组织结构Tomcat是一个基于组件的服务器,它的组件都是可配置的。最外层是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层容器中。

Tomcat的各个组件在Tomcat安装目录下的/conf/server.xml文件中进行配置。

[[325871]]

由Server.xml的结构看Tomcat的体系结构

由上可得出Tomcat的体系结构:

雄猫架构

从上图可以看出,Tomca的核心是两个组件:Connecter和Container。一个Container可以选择多个Connector,多个Connector和一个Container组成一个Service。 Service可以对外提供服务,Server服务器控制着整个Tomcat的生命周期。

组件的生命线“Lifecycle”Service 和Server 管理其下面组件的生命周期。 Tomcat中组件的生命周期是通过Lifecycle接口来控制的。只要组件继承这个接口并实现其中的方法,就可以被拥有它的组件统一控制。这样就可以逐层控制,直到最高层组件。 Tomcat中所有组件的生命周期,最高的组件是Server,控制Server的是Startup,也就是你启动和关闭Tomcat。Tomca的两大组件:Connecter和ContainerConnecter组件一个Connecter会在指定端口监听客户请求,接收浏览器发来的tcp连接请求,分别创建Request和Response对象与请求者交换数据,然后生成一个线程处理请求并将生成的Request和Response对象传递给处理Engine(Container的一部分),从Engine获取响应并返回给客户端。

Tomcat中有两种经典的Connector,一种直接监听来自Browser的HTTP请求,另一种来自其他WebServer的请求。 Cotote HTTP/1.1 连接器在端口8080 上侦听来自客户浏览器的HTTP 请求,Coyote JK2 连接器在端口8009 上侦听来自其他Web 服务器的Servlet/JSP 请求。

Connector最重要的功能就是接收连接请求,然后为Container分配线程来处理请求,所以这个必须是多线程的,而多线程处理是Connector设计的核心。

Container组件Container的架构如下:

容器架构

Container是容器的父接口。该容器是使用典型的责任链设计模式来设计的。它由四个自容器组件组成,分别是Engine、Host、Context和Wrapper。这四个组成部分相互负责,具有包含关系。通常一个Servlet类对应一个Wrapper。如果有多个Servlet定义了多个Wrapper,如果有多个Wrapper,就必须定义一个更高的Container,比如Context。

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

Engine容器Engine容器比较简单。它只定义了一些基本的关系。 Host容器Host是Engine的子容器。 Host 代表Engine 中的虚拟主机。这个虚拟主机的功能就是运行多个应用程序。它负责安装和扩展应用程序,并识别应用程序以便您区分它们。它的子容器通常是Context。除了关联子容器之外,它还存储主机应具有的信息。 Context容器Context代表Servlet的Context。具备了Servlet运行的基本环境。理论上来说,只要有Context,Servlet就可以运行。简单的Tomcat可以不用Engine和Host。 Context最重要的功能就是管理其中的Servlet实例。 Servlet 实例在上下文中显示为Wrapper。还有一点是Context如何找到正确的Servlet来执行呢? Tomcat5过去是通过Mapper类来管理的。Tomcat5之后,这个功能被移到了request中。在前面的时序图中,可以发现获取子容器是通过request来分配的。 Wrapper容器Wrapper代表一个Servlet,它负责管理一个Servlet,包括Servlet的加载、初始化、执行和资源回收。 Wrapper是最底层的容器。它没有子容器,所以调用它的addChild会报错。 Wrapper的实现类是StandardWrapper。 StandardWrapper 还使用Servlet 初始化信息实现ServletConfig。可见StandardWrapper会直接处理Servlet的各种信息。Tomcat 中其它组件Tomcat还有其他重要组件,如安全组件、记录器组件、会话、mbeans、命名等组件。这些组件共同为连接器和容器提供必要的服务。

Tomcat Server处理HTTP请求的流程

Tomcat Server处理HTTP请求的流程

Tomcat Server处理HTTP请求的流程

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

2. Connector将请求交给所在Service的Engine进行处理,并等待Engine的响应。

3.引擎获取请求localhost/test/index.jsp并匹配所有虚拟主机。

4. Engine匹配名为localhost的Host(即使匹配不到,也会将请求交给Host处理,因为该Host被定义为Engine的默认主机),名为localhost的Host获取请求/测试/index.jsp ,匹配它拥有的所有上下文。 Host 与路径为/test 的Context 进行匹配(如果无法匹配,则将请求交给路径名为“ ”的Context 处理)。

5、path=“/test”的Context获取request/index.jsp,并在其映射表中找到对应的Servlet。 Context匹配URL PATTERN为*.jsp的Servlet,对应JspServlet类。

6、构造HttpServletRequest对象和HttpServletResponse对象,并以参数调用JspServlet的doGet()或doPost()来执行业务逻辑、数据存储等过程。

7. Context执行后返回HttpServletResponse对象给Host。

8. Host 将HttpServletResponse 对象返回给Engine。

9.引擎将HttpServletResponse对象返回给Connector。

10. Connector 将HttpServletResponse 对象返回给客户端Browser。

OK,关于解析Tomcat内部结构和请求过程-tomcat架构解析和的内容到此结束了,希望对大家有所帮助。

用户评论

巴黎盛开的樱花

终于找到一篇讲Tomcat内部结构的文章了!一直想了解一下它是怎么工作的。

    有17位网友表示赞同!

有一种中毒叫上瘾成咆哮i

这个标题听起来很专业,希望能深入解析Tomcat的每一部分。

    有20位网友表示赞同!

情字何解ヘ

我对Java应用服务器比较感兴趣,这篇分析应该很有帮助。

    有12位网友表示赞同!

十言i

学习Tomcat架构一直是个难题,看这篇分析文章或许会豁然开朗。

    有8位网友表示赞同!

青衫故人

希望这篇文章能够用通俗易懂的方式讲解这些复杂的机制。

    有9位网友表示赞同!

汐颜兮梦ヘ

了解Tomcat的请求过程对开发WebApp非常重要。

    有13位网友表示赞同!

聽風

最近在学习Web应用技术,这个标题很适合我现在的需求。

    有9位网友表示赞同!

歆久

剖析Tomcat架构能帮助我们更好地理解Java EE 框架。

    有14位网友表示赞同!

北染陌人

期待深入了解Tomcat各个组件的功能和相互作用关系。

    有8位网友表示赞同!

拽年很骚

看这篇文章应该能对开发Tomcat应用有所帮助。

    有8位网友表示赞同!

繁华若梦

我之前只知道Tomcat是一个web服务器,现在想更深层次地学习它。

    有20位网友表示赞同!

呆萌

这篇分析文章能不能讲到Tomcat的性能优化呢?

    有13位网友表示赞同!

孤街浪途

我对Tomcat的安全机制很感兴趣,希望能在这篇文章中有所了解。

    有14位网友表示赞同!

太难

学习Tomcat架构能提升我们的软件开发技能水平。

    有11位网友表示赞同!

淡淡の清香

希望这篇文章能够提供一些实际应用案例和建议。

    有18位网友表示赞同!

作业是老师的私生子

对于想从零开始学习Javaweb的人来说,这篇分析应该是个不错的入门资料。

    有12位网友表示赞同!

羁绊你

期待文章的图片和示意图,能更加直观地理解Tomcat的架构图。

    有8位网友表示赞同!

眉黛如画

有了对Tomcat内部结构的了解,才能更好地去调试和维护应用程序。

    有8位网友表示赞同!

海盟山誓总是赊

学习Tomcat架构是IT从业者必备技能之一。

    有11位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7358.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666