链接:https://www.zhihu.com/question/21054519/answer/31410339
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
同意上面的答案。要看你带着什么样的目的去看tomcat源码。
作为一个发展有十多年的,广为使用的成熟的应用容器,tomcat还是有很多值得学习的。
我随便抛出一些技术点,看看这些问题你是否思考过?
1)如何让一个java程序成为一个类似于daemon这样的进程,在当前终端关闭后不退出,不同平台靠什么来解决这个问题?
2)如何处理系统信号?
3)如何做监控?是否使用jmx?
4)应用是怎么部署的?servlet3有什么不同?
5)多个应用之间是怎么相互隔离的?tomcat的classloader机制是怎样的?
6)servlet3和servlet3.1 新增的异步和非阻塞特性有什么用?
7)怎么预防应用可能导致的内存泄露?
8)关闭服务的时候,应该先暂停/关闭什么,后关闭什么?
9)tomcat的扩展机制是通过什么方式提供给开发者的?
10)BIO/NIO/APR 三种connector实现上的优劣是什么?
11)jsp文件是怎么编译和执行的?
12)HTTP协议本身就够喝一壶,tomcat7/8里支持的websocket/spdy等新特性本身就挺复杂的
1、了解tomcat是如何实现的http协议的。
2、tomcat是如何实现j2ee的众多规范,如jndi, servlet, jsp等规范。
比较重要的还是servlet规范,读之前需要http协议的一些知识。
还可以根据你个人的目标而定,如想要了解tomcat的实现机制,看一下web容器是如何构成的,web应用的类加载器是如何实现的。或者你想了解一下代码风格,也可能是代码的组织形式,这是从目标而言的。
只要去想,总是有各方面的可以获取的东东之前在微信里写过两篇:
怎样阅读源代码?
读源码时,我们到底在读什么?
比如了解多线程应用怎么写,看看容器的子容器加载就明白不少。想了解classLoader,双亲委托,看看WebappClassloader,看看应用是如果加载类的就会豁然开朗。想学责任链设计模式,看看Filter是怎么解析执行的就掌握了。点有很多,重点在于你希望学到什么,带着你的目的学看,才会关注到你关注的东西。
几年前花过一点时间在开源码上,现在感觉很后悔。
Tomcat作为一个维护多年的项目,很多代码在Java的早期就已经写好,design pattern和对java的运用都有比较重的历史包袱。单纯出于学习的目的比较事倍功半。
如果只是想了解一下web server container是怎么实现的可以看看netty