
Tomcat
silvery_white
这个作者很懒,什么都没留下…
展开
-
Tomcat启动部分源代码分析(一) -- 概览
一. 概览本文所涉及的Tomcat为6.0版本。Tomcat的启动始于org.apache.catalina.startup.Bootstrap#main(),下面来列举一下相关的源代码:[code="java"] public static void main(String args[]) { if (daemon == null) { daemon =...2008-10-28 12:10:42 · 107 阅读 · 0 评论 -
Tomcat NIO源代码分析(二) -- Poller
接着上面的流程,现在请求到了Poller的#register()方法[code="java"] public void register(final NioChannel socket) { socket.setPoller(this); // KeyAttachment是对NioChannel信息的包装,同样是非GC KeyAttachment key = keyCac...2010-12-08 08:46:57 · 148 阅读 · 0 评论 -
Tomcat NIO源代码分析(一) -- Acceptor
这里主要讲一下Tomcat使用NIO启动和进行请求处理的大致流程,使用的源码版本是7.0.5,对于其他处理等流程就不写了,我在别的文章里已经大致写过了,不过是用的6.0版本:[url]http://zddava.iteye.com/category/53603[/url]。当Tomcat配置成使用NIO时,启动过程其实和过去差不多,也是Connector#startInternal -> ...2010-12-07 09:11:05 · 219 阅读 · 0 评论 -
Tomcat的Session管理(二) - Session后台处理
Tomcat会开启一个后台线程每隔一段时间检查Session的有效性,这个线程是在Tomcat启动的时候当StardardEngine启动时随之启动的。可以参看StardardEngine的基类ContainerBase的#threadStart()方法:[code="java"] protected void threadStart() { if (thread != null)...2009-01-06 18:57:54 · 133 阅读 · 0 评论 -
Tomcat的Session管理(一) - Session的生成
Session对象的创建一般是源于这样的一条语句: Session session = request.getSession(false);或者Session session = request.getSession();如果不在乎服务器压力可能多那么一点点的话。在Tomcat的实现中,这个request是org.apache.catalina.connector.Request类的包...2009-01-06 17:03:38 · 275 阅读 · 0 评论 -
Tomcat请求处理(七) - Servlet实例的调用
Tomcat请求处理中Servlet实例的调用是和Filter的调用联系在一起的,是在StandardWrapperValve类的#invoke()方法中调用的,前面的文章中提到过,就是下面的这句: filterChain.doFilter(request.getRequest(), response.getResponse());它的源代码如下:[code="java"] p...2009-01-05 17:09:29 · 343 阅读 · 0 评论 -
Tomcat请求处理(六) -- Servlet实例创建
首先,来看一下Servlet的载入过程。具体是在org.apache.catalina.core.StandardWrapper#allocate()这个方法中,源代码如下:[code="java"] public Servlet allocate() throws ServletException { if (unloading) throw new Servl...2009-01-04 19:02:47 · 234 阅读 · 0 评论 -
Tomcat请求处理(五) -- 请求在容器间的流动
请求在Tomcat中传到了CoyoteAdapter的#service()方法中后,就要准备进入Pipeline了,如#service()方法中的这句所示: connector.getContainer().getPipeline().getFirst().invoke(request, response);这里的Container是Engine,然后得到它的Pipeline对象,然后...2008-12-28 13:54:20 · 134 阅读 · 0 评论 -
Tomcat请求处理(四) -- Request, Response, 和Pipeline
1. Request和Response 当处理请求的时候,Tomcat使用org.apache.coyote.Request和org.apache.coyote.Response对象来封装对Socket的数据处理,就好像它们是输入流和输出流一样。 Request和Response是low-level的,并不是用于在开发中使用的,所以,Tomcat使用了适配器模式定义了两个类org.apac...2008-12-25 18:24:51 · 470 阅读 · 0 评论 -
Tomcat请求处理(三) -- coyote请求处理
在上一篇文章文章中,Tomcat的请求处理到了JIoEndpoint$Worker#run()方法的handler.process(socket)这个调用中。这个handler在JIoEndpoint中是这样定义的: [code="java"]protected Handler handler = null;[/code]这个Handler是在JIoEndpoint内部定义...2008-12-19 00:51:55 · 646 阅读 · 0 评论 -
Tomcat请求处理(二) -- 请求处理框架
书接上文。当Tomcat的Acceptor监听到有请求到来时,就会结束阻塞,继续进行程序下面的动作。如下面的代码所示:[code="java"] public void run() { while (running) { while (paused) { try { Thread.sleep(1000); } catch...2008-11-03 10:05:06 · 106 阅读 · 0 评论 -
Tomcat请求处理(一) -- 服务器端口监听
其实tomcat在哪个类中监听请求的代码很容易找到:在org.apache.tomcat.util.net.JIoEndpoint$Acceptor#run()中的这么一句:Socket socket = serverSocketFactory.acceptSocket(serverSocket);可是ServerSocketFactory是个抽象类,我还是很想知道整个过程...2008-10-31 15:14:49 · 910 阅读 · 0 评论 -
Tomcat启动部分源代码分析(五) -- 应用程序加载
前面所叙述的tomcat启动中并没有webapps下边应用程序载入的内容,今天花了些时间在源代码中找到了一些相关的内容。1. webapps下的应用程序的载入,要从Digester的HostRuleSet说起了:[code="java"] public void addRuleInstances(Digester digester) { digester.addObjectC...2008-10-30 19:10:35 · 141 阅读 · 0 评论 -
Tomcat启动部分源代码分析(四) -- 开启容器
四. 开启容器最后是Bootstrap#start()方法的内容了,start()方法结束后,Tomcat就启动成功了。下面来看一下Bootstrap#start()的内容:[code="java"] public void start() throws Exception { if (catalinaDaemon == null) init(); //...2008-10-28 12:23:48 · 102 阅读 · 0 评论 -
Tomcat启动部分源代码分析(三) -- 载入
二. 载入2. Bootstrap的#Bootstrap#load(String[] arguments)方法。方法的源代码如下述所示:[code="java"] private void load(String[] arguments) throws Exception { // 要调用的方法名 String methodName = "load"; /...2008-10-28 12:21:49 · 270 阅读 · 0 评论 -
Tomcat启动部分源代码分析(二) -- 初始化
二. 初始化1. 首先是Bootstrap的#init()操作。[code="java"] public void init() throws Exception { // 设定Catalina setCatalinaHome(); setCatalinaBase(); // 初始化ClassLoader initClassLoaders();...2008-10-28 12:17:00 · 158 阅读 · 0 评论 -
Tomcat NIO源代码分析(三) -- Protocol和Processor
现在请求到了Protocol(Http11NioProtocol)的#process()方法了,由于方法较长,很多代码没有列出:[code="java"] public SocketState process(NioChannel socket) { // 得到Processor Http11NioProcessor processor = connections.remove...2010-12-09 09:39:00 · 178 阅读 · 0 评论