- 博客(22)
- 收藏
- 关注
原创 浅析Tomcat之StandardWrapperValve的Servlet请求处理
StandardWrapper代表的是一个Servlet,那么它也就是容器调用栈中的最终点.Http请求到达后进行的处理也不单单只是调用了Servlet的方法.它还经过了一层的过滤器.它对外服务与上层容器类似,也是调用了基础阀的方法.那么所有这些操作也是在StandardWrapperValve这个阀中发生的.首先看下StandardWrapperValve的invoke方法.下面是简要抽...
2013-09-27 06:36:44
680
原创 浅析Tomcat之StandardWrapper
Wrapper是Context的子容器,它代表了在应用部署描述中的一个单独的servlet.它通过Servlet的init和destroy方法掌管了底层的Servlet的生命周期.并且其中的阀还负责调用Servlet响应用户请求的功能.Wrapper的默认实现是StandardWrapper.首先,还是很老套地说StandardWrapper的构造函数还是跟StandardContext等...
2013-09-27 06:36:24
394
原创 浅析Tomcat之StandardContext
Context是Host的子容器,在servlet引擎中它代表了一个web application.它在每一个Catalina中部署的应用几乎都是存在的.它的子容器是Wrapper(一个具体servlet的定义),Context是标准实现是StandardContext,与StandardHost的实现模式类似.它承担了创建Wrapper容器(Servlet),Filter,ErrorPage...
2013-09-25 08:01:17
416
原创 浅析Tomcat之HostConfig的应用部署
HostConfig主要承担虚拟主机启动是部署应用的作用.其中可以分解为3个类型的应用.在它的实现中主要分解为3个方法和内部类来解决.部署应用也就是动态在代码中生成Host的子容器Context.也就是一个app和一个Context对应.我们知道deployApps这个方法把应用的部署分解到deployDescriptors,deployWARs,deployDirectories中.分别...
2013-09-25 08:01:03
446
原创 浅析Tomcat之StandardHost
Engine是Tomcat的整个Servlet引擎.它的子容器是Host,一般称之为虚拟主机.Engine和Host是一对多的关系.Host既然同为Servlet容器那么它也承担着对请求的处理,主要体现在它的StandardHostValue上面.除此它还有一个重要的功能也就是虚拟主机下的应用的发布,这项功能主要体现在HostConfig上面.我们知道StandardEngineValue...
2013-09-25 08:00:50
511
原创 浅析Tomcat之StandardEngine
Tomcat的容器中,有着4个层次的Servlet容器,这4个类型的容器一般情况下是从属的关系.其中顶层的容器为Engine.这个Engine是Tomcat的整个Servlet引擎.它的子容器是Host,默认情况下Tomcat会有一个Engine,它所对应的阀是StandardEngineValve首先,我们可以回头看下server.xml的配置.<Engine name="Ca...
2013-09-25 08:00:36
298
原创 浅析Tomcat之Pipeline和Value
Tomcat的容器中,内容的执行是通过一个管道来控制的,它定义了一个Pipeline,4个层次的容器都持有了一个Pipeline用以执行预定义好的任务.而具体的任务则装载在Value中,也就是所谓的阀.我们知道在连接适配器中的服务方法通过了调用connector.getService().getContainer().getPipeline().getFirst().invoke(requ...
2013-09-25 08:00:19
341
原创 浅析Tomcat之Container概览
Container是容器接口.我们知道请求到达连接器,经过一些预处理,调用容器的方法.来真正地处理请求.Container也就是servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在Tomcat中有4种类型的容器.分别是Engine,Host,Context,Wrapper.org.apache.catalina.Container这个接口有...
2013-09-23 08:36:49
196
原创 浅析Tomcat之Coyote连接器架构分析
Tomcat7使用的是Coyote的连接器,在前面的博文中已经介绍了不少的组件.那么浏览器发起一个请求是如何到达服务器并且转发到Servlet容器呢,这就是连接器和连接适配器的作用.接收请求的源端是Endpoint的Acceptor.由Worker线程,ConnectionHandler等进行一系列的处理.最终到达Container.先看看结构图.Connector持有的对象是Pr...
2013-09-23 08:36:19
286
原创 浅析Tomcat之CoyoteAdapter
Adapter连接了Tomcat连接器Connector和容器Container.它的实现类是CoyoteAdapter主要负责的是对请求进行封装,构造Request和Response对象.并将请求转发给Container也就是Servlet容器.首先它实现了4个主要方法,以接口的形式给予了定义.public interface Adapter { public v...
2013-09-23 08:35:51
2136
原创 浅析Tomcat之Processor及其实现类
Coyote连接器的org.apache.coyote.Processor<S>是主要负责请求的预处理.并通过它将请求转发给Adapter.不同的Protocol有不同的实现方式,那么自然其对应的Processor实现也不同.其中AbstractProcessor对为这些不同的Processor提供了一个基础的实现.它实现了HTTP和AJP所需要的共同功能和属性.首先看下Pro...
2013-09-23 08:35:31
745
原创 浅析Tomcat之AbstractConnectionHandler及其子类
在Tomca中Endpoint主要用来接收网络请求,处理则由ConnectionHandler来执行.ConnectionHandler主要作用是调用对应协议的Processor来处理请求.而对应的processor经过简单的内容解析之后.则调用Adapter(连接适配器)的方法,将请求转发给容器.由Servlet容器来处理用户请求.由于Tomcat支持不同的协议,则需要不同的Connecti...
2013-09-23 08:35:10
650
原创 浅析Tomcat之AbstractProtocol
回顾一下连接器Connetor的实现,面对不同的协议处理托管给不同的ProtocolHandler来处理.这个Handler的作用是组合了Endpoint和ConnectionHandler.启动连接侦听和处理.所谓的处理也就是把连接的内容解析给Servlet容器.ProtocolHandler的基础实现是AbstractProtocol,它为所有的协议处理类提供默认的基础实现.首先Abs...
2013-09-22 16:01:20
1180
1
原创 浅析Tomcat之AprEndpoint
APR是Apache可移植运行库(Apache portable Run-time libraries)的简称,这是一个可以跨越多操作系统平台使用的底层支持接口库.在Tomcat的实现中就有使用该库的地方,AprEndpoint就是将Socket方面的操作直接用JNI替代而非Java元素的API.这使得其有较高的性能要求.同样AprEndpoint也是继承了AbstractEndpoint在实...
2013-09-22 16:00:48
932
原创 浅析Tomcat之JIoEndpoint
AbstractEndpoint是基础的通信端点的实现,那么也就有具体的实现.其中一个就是JIoEndpoint,它的作用是处理访问的TCP连接.具体的实现是主线程启动一个Acceptor线程,它将启用一个阻塞型Socket侦听Tcp连接,获得连接后对每个连接启动一个worker线程进行处理.这是一个典型的Listen-Accept-Handle实现.先看下它是怎么实现AbstractEn...
2013-09-22 16:00:27
1076
原创 浅析Tomcat之AbstractEndpoint
Tomcat中的Connector将具体的协议处理托管给了不同的ProtocolHandler实现类.这些实现类都内置这一个很重要的对象,AbstractEndpoint这是一个抽象类,不同的协议需要提供不同的Endpoint.这个类的作用就是提供底层的网络I/O的处理.不同的ProtocolHandler所内置的Endpoint是不同的.但是AbstractEndpoint为这些类抽象出了一...
2013-09-22 16:00:10
804
原创 浅析Tomcat之LimitLatch
Tomcat线程工具类中有个LimitLatch,这是一个锁存器类.它的作用就是在多线程的情况下控制并发.使用了java的多线程框架中的同步器AbstractQueuedSynchronizer.锁存器类主要用在接受连接的场景,从它的名字来看这是一个有限限制的锁存器.也就是可以控制最大的并非数.当超过这个并发数的时候就把当前请求并发执行的线程放入到等待队列中.待有释放线程时才按FIFO的方式执...
2013-09-22 15:59:40
1051
原创 浅析Tomcat之Connector
Tomcat7默认连接器是类org.apache.catalina.connector.Connector.连接器的作用是等待引入的HTTP请求,创建request对象和response对象,然后调用org.apache.catalina.Container接口的invoke方法将request和response传递给servlet容器.在invoke方法内部,servlet容器会载入相应的s...
2013-09-21 09:48:16
371
原创 浅析Tomcat之StandardServer和StandardService
Tomcat的启动类是Boostrap,它的功用是接收控制台的命令,根据命令来控制Catalina.而Catalina负责的是解析Tomcat的配置文件,以此来创建服务器组件.并根据命令来对其进行管理.服务器组件和服务组件的任务就是组装并启动Servlet引擎,Tomcat连接器.Catalina有个属性server这个就是它所管理的server.它的主要方法也是对其进行操作的.其中loa...
2013-09-21 09:48:02
413
原创 浅析Tomcat之Lifecycle
Tomcat很多组件都有其生命周期,比如:StandardServer,StandardService等.这个生命周期用来控制组件的资源情况.在Tomcat的生命周期管理中主要体现在接口Lifecycle,LifecycleListener及其相关类LifecycleEvent.这个实现方式是典型的观察者模式.顾名思义,实现Lifecycle接口的是被观察的对象,而实现LifecycleL...
2013-09-21 09:47:48
146
原创 浅析Tomcat之Digester
Bootstrap在实例化之后会实例化一个Catalina的实例.当命令是启动的时候,就调用了Catalina的start来启用服务器.也就是构造并实例化了Tomcat的连接器和容器.这个所谓的连接器和容器也是Java编码,在Tomcat的实现之内.他们之间的关系并不是通过硬编码来实现的.而是通过了Server.xml等配置文件.而Digester就是用来解析xml配置文件,并根据他们的关系来...
2013-09-21 09:47:29
192
原创 浅析Tomcat之Bootstrap类
Tomcat的启动类是Bootstrap,它承担着管理Catalina的责任.看其main方法可以知道它首先是实例化一个Bootstrap实例,这是一个主线程.该实例创建后立即进行初始化,次调用是一个很复杂的过程.它包含了Tomcat的很多初始化工作,接着是把该实例赋值给静态变量daemon.然后才是执行相应的启动或者停止命令. 首先,看看Bootstrap的init方法,代码如下:...
2013-09-21 09:46:43
287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人