tomcat
文章平均质量分 86
fjs_cloud
这个作者很懒,什么都没留下…
展开
-
Tomcat源码阅读之Bootstrap启动流程与classLoader设计
嗯,以前大体上看过jetty6.0的源码,算是对java EE应用容器有了一定的了解,但是在实际的线上环境中应用的最多的应该还是tomcat,而且据说性能方面tomcat也略好一些。。。那么就趁着现在还比较闲就看看它的源码吧。。。首先在实际开始之前先来说说tomcat对ClassLoader方面的处理。。。当然这部分是参考了网络上其他的人的博客。。。原创 2014-02-27 12:09:09 · 2485 阅读 · 0 评论 -
Tomcat源码阅读之StandarWrapper源码分析
StandarWrapper,嗯,其实可以将其理解为对servlet对象的包装。。。先来看看简单的继承结构吧:这里的继承体系还算是比较简单吧,首先是继承了ContainerBase,让StandarWrapper有了基本的对Container的管理能力,其实是先了ServletConfig接口,这个接口应该比较熟悉吧,在servlet的初始化的时候,传进去的就是这个参数,另外就是还有实现了Wrapper接口和NotificationEmitter。。。从前面可以知道,Wrapper对象是在Context原创 2014-03-24 20:34:46 · 1641 阅读 · 0 评论 -
Tomcat源码分析之:ServletOutputStream的实现
在tomcat8中已经完全支持非阻塞的方式接收以及发送数据了。。。。但是比较遗憾的是,以前遗留下来的太多的老代码都不支持这种新的方式来发送数据。。。木有办法。。。这里来看看Tomcat中是如何实现ServletOutputStream的吧。。。。在具体的来看它之前,这里先来一张图来描述一下Tomcat的数据发送时候的流动。。。原创 2014-04-17 16:17:53 · 8857 阅读 · 2 评论 -
Tomcat源码阅读之Mapper分析
Mapper对于Tomcat或者jetty这种应用服务器来说应该算是非常重要的一个东西了。。首先来说它是干嘛用的,听名字就基本上能猜出来,对于请求,对这个请求进行路由,交给应该负责处理这个请求的最终代码就是Mapp而应该干的或。。对于servlet来说,对应的就是一次http请求该交给哪一个servlet来处理。其实以前在看jetty的代码的时候就相当于看过了一种实现的方式,jetty采用的是一种类似于tries(字典树)的查询来进行请求的路由。。。感觉还算是蛮不错的吧。。毕竟字典树在做基于字符串的查原创 2014-03-18 21:28:21 · 2771 阅读 · 0 评论 -
Tomcat源码阅读之底层IO封装(1)InternalNioInputBuffer的分析
最近读代码的节奏很慢,。。在HttpPrcoessor部分已经停滞了挺久的时间了。。可能它设计到的东西还是挺多的吧。。。今天写的是InternalNioInputBuffer类型的分析,它算是Tomcat对IO封装部分的一个十分重要的环节了,可以将其理解为用于沟通底层socket与上层servletInputStream的中间层。。。而且InternalNioInputBuffer中还实现原创 2014-03-28 15:44:16 · 3118 阅读 · 0 评论 -
Tomcat源码分析之ClassLoader部分的设计详细分析
读Tomcat的源码也算是有一段时间了吧,感觉读的也是断断续续的,这次写一篇比较综合性的吧,来看看Tomcat的整体ClassLoader体系的设计。。。。在具体的涉及到源码之前,先来一张图来整体的描述一下整体的结构吧:原创 2014-03-16 19:35:29 · 3677 阅读 · 0 评论 -
Tomcat源码分析之Context的创建与启动分析
在前面的文章中,知道在HostConfig对象中,会在host启动的时候开始部署当前host下面的web应用程序,一般情况下就是扫描webapps文件夹,然后为每个web应用程序创建Context对象,一般情况下也就是StandardContext。。这里其实一个Context也就代表了一个web应用程序,它具体来维护应用程序定义的servlet,filter,资源。。。但是这里由于Con原创 2014-03-15 20:48:30 · 2554 阅读 · 0 评论 -
Tomcat源码阅读之StandardEngine分析与Valve的设计
在上一篇的文章中看了StandardService的实现。。。这里可以将它要做的事情总结如下:(1)管理其拥有的container对象,以及其拥有的connector对象,同时service只能有一个container对象,可以拥有多个connector对象。。。(2)StandardService对象同时还要处理request的map问题,它有maplistener和mapper,maplistener用于监听container对象,从而增加mapper里面的信息。。。原创 2014-03-10 15:42:09 · 2008 阅读 · 0 评论 -
Tomcat源码阅读之Container与Pipeline的设计
可以将tomcat的结构大概这样描述吧:(1)sever对象是service对象的容器,(2)service对象是connector对象和container对象的容器,同一个service对象可以包含多个connector对象,但是只能包含一个container对象。。。(3)container对象是属于自包含的,自己又可以包含多个子container对象,(4)同时container对象包含一个pipeline对象,pipeline对象可以理解为是valve对象的容器。。。原创 2014-03-07 16:47:00 · 2225 阅读 · 0 评论 -
Tomcat源码阅读之StandardService与MapperListener分析
而Service可以有多个connector对象,但是只能有一个container(一般就是engine对象)对象。。所以分析各个不同的container对象的入口就在于service对象。。。而在tomcat中一般都是用StandardService这个类型。。。先来看看一个初略的继承结构吧:原创 2014-03-08 20:43:56 · 3512 阅读 · 0 评论 -
Tomcat源码阅读之StandardHost与HostConfig的分析
前面的文章分析了StandardEngine,这里来分析一下由Engine对象来管理的另外一种对象吧:Host。。一般情况下,在tomcat中都是默认使用StandardHost类型。。。这里先来看看在catalina是如何配置创建StandardHost对象的吧:原创 2014-03-12 19:40:22 · 2158 阅读 · 0 评论 -
Tomcat源码阅读之Connector设计与实现
先暂时跳过Service的分析,先来看看connector部分。。。。好像在tomcat8这个版本中,只有Nio的Connector可以用了。。。我们来看看在server.xml中一个connector的定义:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>这里的参数应该很好理解,首先是端口,将会创建acceptor监听该端口,然后是协议的类型,接着是链接超时,然后是原创 2014-03-04 21:27:10 · 3661 阅读 · 1 评论 -
Tomcat源码分析之Server与Lifecycle的设计与实现
最近看Tomcat的源码的节奏还算是挺紧凑的,给人的感觉,tomcat的代码相对以前读的jetty的代码显得更有条理一些。。。当然这也是有可能是因为自己看的jetty的版本是比较老的,而看的Tomcat的代码却是比较新的Tomcat8的代码。。。。原创 2014-03-02 19:39:32 · 1855 阅读 · 0 评论 -
Tomcat源码阅读之JMX部分的设计与实现
Tomcat通过读取XML文件中的描述,动态的通过JMX来注册对象,将一些属性以及方法暴露出来,可以很方便的实现对当前Tomcat服务器的监控和管理。。。本文详细分析了Tomcat实现的这部分的细节,以及如何通过Tomcat的代码来动态的注册自己的对象到JMX上面去。。。原创 2014-02-28 16:01:13 · 2760 阅读 · 1 评论 -
Tomcat源码阅读之Server.xml文件的处理与Catalina启动流程
tomcat启动时对xml文件的处理,以及创建的服务器对象之间的关系。。。原创 2014-02-27 15:34:59 · 2439 阅读 · 6 评论 -
Tomcat源码阅读之闭锁的实现与连接数量的控制
嗯,今天其实在看HtttpProcessor的实现,但是突然想到了以前在看poller的时候看到了有闭锁,用于控制当前connector的连接数量,嗯,那就顺便把这部分来看了。。。在Tomcat中,通过继承AbstractQueuedSynchronizer来实现了自己的同步工具,进而来实现了一个用于控制连接数量的闭锁。。LimitLatch。。这里就需对AbstractQueuedSynchronizer有一些初步的了解。。。原创 2014-03-25 19:57:53 · 3010 阅读 · 0 评论