在理解Tomcat源码前,想描述下Tomcat的应用服务器与其他知名开源服务器的区别,更有助于理解源码。相较于著名的Apache Http Server(httpd) / Nginx / Jetty,Tomcat的应用场景以及与这些服务器对比下,其优势缺点是什么呢?
Httpd
:
https://httpd.apache.org
从官网描述可知,此服务器面向Unix和windows,提供
有效率且极其稳定
的HTTP服务。模块化服务器,支持独立运行,本身支持静态解析(html,css,图片等),可通过扩展支持动态页面。
同步多进程模型,一个连接对应一个进程.
Nginx
:
http://nginx.org/en/
轻量级HTTP/反向代理服务器,并发能力强于Httpd,
占用内存资源极少
,但只支持静态解析,不支持扩展动态页面解析。其
负载均衡/静态文件处理/高并发
是其优势。
异步的,多个连接(万级别)可以对应一个进程.
Jetty
:
https://www.eclipse.org/jetty/
轻量级
Servlet容器, 其API以一组JAR包形式发布. 开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。即
嵌入式的Web容器
。
Tomcat
:
https://tomcat.apache.org
Web应用(Java)服务器,只是个Servlet容器,优势是动态解析页面/处理动态请求。不支持嵌入。
总结:综合以上四个开源项目的特点,了解到Tomcat的优势及局限性,往往Tomcat需要结合其他服务器如Nginx和Httpd来满足高并发稳定的多样需求。Nginx用来负载均衡转发请求—静态资源请求由Nginx转发至专门的静态服务器(httpd等),动态内容请求转发给Tomcat。严格意义上来讲,Httpd和Nginx应该叫做HTTP Server,而tomcat是一个Application Server是一个Servlet应用的容器。
参考: