Tomcat 源码笔记

来源:互联网 发布:任何人都能做淘宝客吗 编辑:程序博客网 时间:2024/05/22 16:59

粗略过了一遍tomcat的源码, 画个图作为记录.

 

走马观花扯谈几点.

1. ClassLoader 使用java.net.URLClassLoader, 我以前倒不知道怎么动态load jar包这些.  tomcat 在catalina.properties配置了多个class loader应该载入的jar.

个人觉得ClassLoader蛮麻烦的,  动态载入jar包之后用反射就罗罗嗦嗦了, 至少其他语言没class loader但是又蛮动态.

ClassLoader的父子层级在tomcat里是很重要的.

 

2. Catalina 解析server.xml里使用了Digester, 基于SAX, 还有堆的一个封装, 按照XML配置, 设置相应XML PATH的处理规则RULE,  来装载类对象蛮方便, 在apache commons好像是单独出来的一个API, 这里它整合到tomcat源码里面去了.  这个封装扩展Rule而不是重写新的DefaultHandler, 至少精巧多了.

Digester比较关键, 它负责实例化了Service, Connector, Host, Engine等等.

 

3.  ProtocolHanlder有两个, APR那个好像是使用了native codes实现的thread pool和socket, 性能应该会比较好吧, jboss web不是也说重写之后性能更好?  所以tomcat启动提示都要找APR dll什么的.

 Java实现的Http11ProtocolHandler就弱点了, Thread pool实现都是加全局锁的, 线程调度, 比JDK5.0 Doug Lea并发性要差些的.    IO操作也还是阻塞的.

tomcat6 好像说是就用上NIO, 不知道thread pool换了没有.

 

4. JMX使用了commons-modeler-2.0.1.jar 所有的组件基本都用JMX注册了,  查找管理MBean, 很多package下都有mbeans-descriptors.xml 好像tomcat manager start undeploy war包时都跟这些也跟JMX有关, 这部分不熟悉, 需要恶补一下.   使用jmx 顺带一下 tomcat启动加入 -Dcom.sun.management.jmxremote.port="1090" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"' , 使用jconsole.exe 好像可以看JVM堆栈, 不知道跟里面的Mbean有没关系?

 

5. 比较有意思的一块应该就是JSP解析, 动态编译成servlet这部分. jasper单独的一个项目, JSPServlet估计就是个入口了, 有空是要好好学习一下的.

 

6. 类图的关系可能有点问题,  是关联, 聚合等等有待考究. 很多接口也漏了..

 

7. 具体JSP请求没 序列图, 转个别人的文章

 

http://dev.csdn.net/article/28/28075.shtm

原创粉丝点击