希望各位网友在看完<<how tomcat works>>一书或者鄙人的tomcat专栏文章后再看这篇博客
这里主要是梳理各个章节的核心概念
第1章从这本书一开始就介绍了一个简单的HTTP服务器。要建立一个可工作的HTTP服务器,你需要知道在 java.net 包里边的 2 个类的内部运作:Socket 和 ServerSocket。这里有关于这 2个类足够的背景资料,使得你能够理解附带程序是如何工作的。
类图如下:
第一章的程序,只能处理静态资源,这一章的程序就能处理简单的servlet。
第 2 章说明简单的 servlet 容器是如何工作的。这一章带有 2 个 servlet 容器应用,可以处理静态资源和简单的 servlet 请求。尤其是你将会学到如何创建 request 和 response 对象,然后把它们传递给被请求的 servlet 的 service 方法。在 servlet 容器里边还有一个 servlet,你可以从一个 web 浏览器中调用它。
核心代码如下:
HttpServer有两个处理器,分别为ServletProcessor与StaticResourceProcessor。到底使用哪个,取决于分析到的uri的开头。如下图:
RequestFacade类接收一个Request对象传递给其成员变量ServletRequest,public class RequestFacade implements ServletRequest { private ServletRequest request = null; public RequestFacade(Request request) { this.request = request; } /* implementation of the ServletRequest*/ public Object getAttribute(String attribute) { return request.getAttribute(attribute); } }看到了吧,RequestFacade只是一个二传手,不过里面根本就没有parse方法。所以把RequestFacade作为参数传递给servlet是安全的。
第3章介绍了一个简化版本的Tomcat 4默认连接器。这章里边的程序提供了一个学习工具,用于理解第 4 章里边的讨论的连接器。
本章类图
parseRequest(input, output); parseHeaders(input); //check if this is a request for a servlet or a static resource //a request for a servlet begins with "/servlet/" if (request.getRequestURI().startsWith("/servlet/")) { ServletProcessor processor = new ServletProcessor(); processor.process(request, response); } else { StaticResourceProcessor processor = new StaticResourceProcessor(); processor.process(request, response); }分析完http请求,把它交给ServletProcessor或者StaticResourceProcessor即可。
第 4 章介绍了 Tomcat 4 的默认连接器。这个连接器已经不推荐使用,推荐使用一个更快的连接器,Coyote。不过,默认的连接器更简单,更易于理解。
在这一章里,即引入了连接器的概念,也引入了容器的概念。咱们慢慢说,先看uml图。
连接器的任务就算是完成了!
这一节的容器是simplecontainer,它的invoke干的事情,其实就是前面几章里ServletProcessor类里process()方法干的事情,通过urlclassloader加载类,调用加载类的service方法。
后面几章的内容,咱们明天接着说。