中专网站建设课程wordpress 登陆后返回当前页面
中专网站建设课程,wordpress 登陆后返回当前页面,杭州网站程序开发公司,专业建设总结tomact官方网站#xff1a;https://tomcat.apache.org/
浏览器访问服务器流程
http请求处理流程#xff1a; 注意#xff1a;浏览器访问服务器使用的是Http协议#xff0c;Http是应用层协议#xff0c;用于定义数据通信的格式#xff0c;具有的数据传输使用的是TCP/IP协…tomact官方网站https://tomcat.apache.org/浏览器访问服务器流程http请求处理流程注意浏览器访问服务器使用的是Http协议Http是应用层协议用于定义数据通信的格式具有的数据传输使用的是TCP/IP协议。Tomcat系统总体架构Tomcat 请求处理大致过程Tomcat是一个Http服务器能够接收并且处理http请求所以tomcat是一个http服务器我们使用浏览器向某一个网站发起请求发出的是Http请求那么在远程Http服务器接收到这个请求之后会调用具体的程序Java类进行处理往往不同的请求由不同的Java类完成处理。HTTP 服务器接收到请求之后把请求交给Servlet容器来处理Servlet 容器通过Servlet接口调用业务类。Servlet接口和Servlet容器这一整套内容叫作Servlet规范。注意Tomcat既按照Servlet规范的要求去实现了Servlet容器同时它也具有HTTP服务器的功能。Tomcat的两个重要身份1http服务器2Tomcat是一个Servlet容器Tomcat Servlet容器处理流程当用户请求某个URL资源时1HTTP服务器会把请求信息使用ServletRequest对象封装起来2进一步去调用Servlet容器中某个具体的Servlet3在2中Servlet容器拿到请求后根据URL和Servlet的映射关系找到相应的Servlet4如果Servlet还没有被加载就用反射机制创建这个Servlet并调用Servlet的init方法来完成初始化(5) 接着调用这个具体Servlet的service方法来处理请求, 请求处理结果使用ServletResponse对象封装。6把ServletResponse对象返回给HTTP服务器HTTP服务器会把响应发送给客户端Tomcat系统总体架构通过上面的讲解我们发现tomcat有两个非常重要的功能需要完成1和客户端浏览器进行交互进行socket通信将字节流和Request/Response等对象进行转换2Servlet容器处理业务逻辑对应角色http服务器功能Tomcat 设计了两个核心组件连接器Connector和容器Container来完成 Tomcat 的两大核心功能。连接器负责对外交流处理Socket连接负责网络字节流与Request和Response对象的转化容器负责内部处理加载和管理Servlet以及具体处理Request请求Tomcat连接器组件CoyoteCoyote简介Coyote 是Tomcat 中连接器的组件名称是对外的接口。客户端通过Coyote与服务器建立连接、发送请求并接受响应。(1) Coyote 封装了底层的网络通信 (Socket 请求及响应处理)(2) Coyote 使Catalina 容器容器组件与具体的请求协议及IO操作方式完全解耦(3) Coyote 将 Socket 输入转换封装为 Request 对象进一步封装后交由 Catalina 容器进行处理处理请求完成后Catalina 通过 Coyote 提供的 Response 对象将结果写入输出流(4) Coyote 负责的是具体协议应用层和 IO传输层相关内容Tomcat Coyote 支持的 IO模型与协议Tomcat支持多种应用层协议和I/O模型如下应用层应用层协议描述HTTP/1.1这是大部分Web应用采用的访问协议。AJP用于和WX集成如Apache以实现对静态资源的优化以及集群部署当前支持AJP/1.3。HTTP/2HTTP 2.0大幅度的提升了Web性能。下一代HTTP协议自8.5以及9.0版本之后支持。传输层IO模型描述NIO非阻塞I/O采用Java NIO类库实现。NIO2异步I/O采用JDK 7最新的NIO2类库实现。APR采用Apache可移植运行库实现是C/C编写的本地库。如果选择该方案需要单独安装APR库应用层应用层协议描述默认的协议是Http/1.1 协议部分HTTP/1.1这是大部分Web应用采用的访问协议。AJP用于和WX集成(如Apache),以实现对静态资源的优化以及集群部署,当前支持AJP/1.3。HTTP/2HTTP 2.0大幅度的提升了Web性能。下一代HTTP协议,自8.5以及9.0版本之后支持。Bio同步阻塞IO传输层IO模型描述现在默认的IO模型是NIO io模型部分NIO非阻塞I/O,采用Java NIO类库实现。NIO2异步I/O,采用DK 7最新的NIO2类库实现。APR采用Apache可移植运行库实现,是C/C编写的本地库。如果选择该方案,需要单独安装APR库在8.0之前Tomcat默认采用的I/O方式为BIO之后改为NIO。无论NIO、NIO2还是APR在性能方面均优于以往的BIO。如果采用APR甚至可以达到Apache HTTP Server 的影响性能。Coyote的内部组件及流程Coyote 组件及作用组件作用描述EndpointEndPoint是Coyote通信端点即通信监听的接口是具体Socket接收和发送处理器是对传输层的抽象因此Endpoint用来实现TCP/IP协议的ProcessorProcessor是Coyote协议处理接口如果说Endpoint是用来实现TCP/IP协议的那么Processor用来实现HTTP协议Processor接收来自Endpoint的Socket读取字节流解析成Tomcat Request和Response对象并通过Adapter将其提交到容器处理Processor是对应用层协议的抽象ProtocolHandlerCoyote协议接口通过Endpoint和Processor实现针对具体协议的处理能力。Tomcat按照协议和I/O提供了6个实现类AjpNioProtocol,AjpAprProtocol,AjpNio2Protocol,Http11NioProtocol,Http11Nio2Protocol,Http11AprProtocolAdapter由于协议不同客户端发过来的请求信息也不尽相同Tomcat定义了自己的Request类来封装这些请求信息。ProtocolHandler接口负责解析请求并生成Tomcat Request类。但是这个Request对象不是标准的ServletRequest不能用Tomcat Request作为参数来调用容器。Tomcat设计者的解决方案是引入CoyoteAdapter这是适配器模式的经典运用连接器调用CoyoteAdapter的Sevice方法传入的是Tomcat Request对象,CoyoteAdapter负责将Tomcat Request转成ServletRequest再调用容器TomcatServlet 容器CatalinaTomcat 模块分层结构图及Catalina位置Tomcat是一个由一系列可配置conf/server.xml的组件构成的Web容器而Catalina是Tomcat的servlet容器。从另一个角度来说Tomcat本质上就是一款Servlet容器因为Catalina才是Tomcat的核心其他模块都是为Catalina提供支撑的。比如通过Coyote模块提供链接通信Jasper模块提供JSP引擎Naming提供JNDI服务Juli提供日志服务。Servlet 容器 Catalina 的结构Tomcat (我们往往有一个认识, Tomcat就是一个Catalina的实例, 因为Catalina是Tomcat的核心)其实可以认为整个Tomcat就是一个Catalina实例Tomcat启动的时候会初始化这个实例Catalina实例通过加载server.xml完成其他实例的创建创建并管理一个ServerServer创建并管理多个服务每个服务又可以有多个Connector和一个Container。一个Catalina实例容器一个 Server实例容器多个Service实例容器每一个Service实例下可以有多个Connector实例和一个Container实例Catalina负责解析Tomcat的配置文件server.xml以此来创建服务器Server组件并进行管理Server服务器表示整个Catalina Servlet容器以及其它组件负责组装并启动Servlet引擎,Tomcat连接器。Server通过实现Lifecycle接口提供了一种优雅的启动和关闭整个系统的方式Service服务是Server内部的组件一个Server包含多个Service。它将若干个Connector组件绑定到一个ContainerContainer容器负责处理用户的servlet请求并返回对象给Tomact高级使用及原理剖析Container 组件的具体结构Container组件下有几种具体的组件分别是Engine、Host、Context和Wrapper。这4种组件容器是父子关系。Tomcat通过一种分层的架构使得Servlet容器具有很好的灵活性。Engine表示整个Catalina的Servlet引擎用来管理多个虚拟站点一个Service最多只能有一个Engine但是一个引擎可包含多个HostHost代表一个虚拟主机或者说一个站点可以给Tomcat配置多个虚拟主机地址而一个虚拟主机下可包含多个ContextContext表示一个Web应用程序一个Web应用可包含多个WrapperWrapper表示一个Servlet, Wrapper 作为容器中的最底层, 不能包含子容器上述组件的配置其实就体现在conf/server.xml中。