当tomcat的Conector保存着StandardService实例,而StandardService保存着Container的实例 当Http11NioProcessor.process()方法内调用getAdapter.service(request,response)时会调用CoyoteAdapter.service() 上面会调用请求对应的container的方法. 在这之前有必要说下Container的初始化. 在StandardService的initInternal()中会执行…
Connector组件的Acceptor监听客户端套接字连接并接收Socket. 将连接交给线程池Executor处理,开始执行请求响应任务. Processor组件读取消息报文,解析请求行.请求体.请求头,封装成Request对象. Mapper组件根据请求行的URL值和请求头的Host值匹配由哪个Host容器.Context容器.Wrapper容器处理请求. CoyoteAdaptor组件负责将Connector组件和Engine容器关联起来,把生成的Request对象和响应对象Respon…
tomcat已经启动完成了,那么是怎么处理请求的呢?怎么到了我们所写的servlet的呢? 目录 Http11ConnectionHandler Http11Processor CoyoteAdapter StandardEngineValve StandardWrapperValve 总结 Http11ConnectionHandler 在tomcat 启动之后会使用socket.accept接收请求,接收到之后会调用自己的processSocket来处理请求,在该方法中启动一个SocketP…
1.Http11Protocol中的内部类Http11ConnectionHandler,执行其process方法 if (processor == null) { processor = createProcessor(); } SocketState state = processor.process(socket);//交给processor处理 2.上面的processor为Http11NioProcessor类的实例,在其process方法中,会调用适配器adapter进行数据的处理…
这种情况很多,本文记录我遇到比较奇葩的情况. 第一种情况: 第一次tomact启动成功,访问404,乱捣鼓不知怎么好了:第二次tomcat启动成功,可以访问部分链接,有些却报404,但是代码和数据都还是以前的,没有变.很奇怪! 经常同事指点,查清原因: 请求tomcat里的jsp,tomcat会自动在work目录下生产相关jsp文件,web访问的是work里的,而不是webapps里的.之所以出现我这种情况,是因为tomcat一开始是用一般用户启动的,请求了几个页面后再用root启动,再请求几个…
在上一章查看tomcat启动文件都干点啥---Catalina.java中说道了构造Server,,这次尝试着说一下Tomcat中Server的内容,首先看一下org.apache.catalina.Server接口中定义的方法: 从这里至少可以看出Server中包含很多Service,通过实现如下接口添加一个新的Service到Services的集合中,或者从集合中删除指定的Service: public void addService(Service service); public voi…
Tomcat是一款我们平时开发过程中最常用到的Servlet容器.本系列博客会记录Tomcat的整体架构.主要组件.IO线程模型.请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识. 力求达到以下几个目的: 更加熟悉Tomcat的工作机制,工作中遇到Tomcat相关问题能够快速定位,从源头来解决: 对于一些高并发场景能够对Tomcat进行调优: 通过对Tomcat源码的分析,吸收一些Tomcat的设计的理念,应用到自己的软件开发过程中. 1. Bootstrap启动入口 在前面分…
前面摆了三节的姿势,现在终于要看到最终tomcat监听端口,接收请求了. 目录 Connector Http11Protocol JIoEndpoint 总结 在前面的初始化都完成之后,进行Connector的初始化,也是执行一些生命周期方法. Connector 在启动过程中这个类的主要作用是初始化并启动CoyoteAdapter和Http11Protocol: initInternal 新建一个CoyoteAdapter,并调用protocolHandler.setAdapter方法设置ad…
根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动的入口类:org.apache.catalina.startup.Bootstrap#main main方法是整个tomcat启动时的入口.在main方法中,使用bootstrap.init()来初始化类加载器和创建Catalina实例,然后再启动Catalina线程. public static…
Tomcat启动分析 1 - Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servlet container. (Singleton) 1.2 - Service A Service element represents the combination of one or more Connector components that share a single EngineSer…