隨筆 - 53, 文章 - 0, 評論 - 3, 引用 - 0
          數據加載中……

          Tomcat Source Code Reading

          0. I am reading the source code of Tomcat 6.0.26. To pay off the effort,
          I documents some notes for record. Thanks for the articles about Tomcat
          source code, especially the book <<How Tomcat works>>.

          1. They are two concepts about server, one is called Server, which
          is for managing the Tomcat (start and stop); another is called Connector,
          which is the server to serve the application request. they are on the different
          ports. The server.xml clearly show the difference.

          <Server port="8005" shutdown="SHUTDOWN">
            <Service name="Catalina">
              <Connector port="8080" protocol="HTTP/1.1"
                         connectionTimeout="20000"
                         redirectPort="8443" />
              <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

          although the server is the top level element, logically it should not be.
          Actually in code, Bootstrap starts the service first, which
          in turn start the Server and server's services.

          2. My focus in on Connector part. I care how the request is services by the
          Tomcat. Here are some key classes.

          Connector --> ProtocolHandler (HttpProtocol
                                  and AjpProtocol)                       --> JIoEndPoint
                                                                                     --> Handler(Http11ConnectionHandler
                                                                                     and AjpConnectionHandler)
                                                            
                                                            
          3. Connector is most obervious class, but the entry point is not here.
          The sequence is like this.

          Connector.Acceptor.run()
          --> JioEndPoint.processSocke(Socket socket)
              -->SockeProcess.run()
                  -->Http11ConnectorHandler.process(Socket socket)
                      -->Http11Processor.process(Socket socket)
                          -->CoyoteAdapter.service(Request req, Response res)       

          The core logic is in method Http11Processor.process(Socket socket)                                                  

          CoyoteAdapter.service(Request req, Response res) bridges between Connector module and Container module.

          Any comments are welcome. I may continue the source code reading and dig deeper into it if time permit.


          posted on 2010-03-30 17:11 InPractice 閱讀(616) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 衡南县| 邹平县| 新丰县| 芷江| 什邡市| 五河县| 安西县| 广德县| 名山县| 丁青县| 浑源县| 西城区| 连南| 广河县| 米林县| 马关县| 德格县| 株洲县| 安远县| 苏州市| 丰原市| 碌曲县| 贵港市| 南汇区| 千阳县| 东海县| 色达县| 江都市| 石嘴山市| 孟津县| 阳高县| 弥渡县| 东宁县| 大足县| 通州市| 分宜县| 丰都县| 古蔺县| 罗城| 布尔津县| 北安市|