【Tomcat源码阅读分享】—(2)Servlet源码解析

众所周知,Servlet的生命周期在容器里如下:


【Tomcat源码阅读分享】—(2)Servlet源码解析_第1张图片
            图一 Servlet生命周期                                     

那我们主要从它的生命周期来分析源码。一般来说,我们开发Sevlet,只需继承HttpServlet这个类即可,其类关系图如下:


【Tomcat源码阅读分享】—(2)Servlet源码解析_第2张图片
                                   图二 HttpServlet类关系图                                           

Servlet类为实现类提供了init(ServletConfig),service()和destroy()方法,并提供了获取servlet配置信息的方法。


【Tomcat源码阅读分享】—(2)Servlet源码解析_第3张图片
                                      图三 Servlet接口                                            

ServletConfig类为servlet的配置信息,相当于配置在web.xml对应servlet的配置信息。

GenericServlet为一个抽象类,实现了init(ServletConfig)方法,初始化了ServletConfig,并调用了init()方法,在此类中,这个方法为空实现,可以在我们自定义的Servlet中重写该方法,同样地,destroy()方法也是如此。

在这个类中,service()方法并没有实现,而是继承下来了,让我们看下子类HttpServlet的service()方法。


【Tomcat源码阅读分享】—(2)Servlet源码解析_第4张图片


【Tomcat源码阅读分享】—(2)Servlet源码解析_第5张图片
【Tomcat源码阅读分享】—(2)Servlet源码解析_第6张图片

在这个方法里,第一步会调用HttpServletRequest中的getMethod获取请求类型,根据各个类型进行转发调用该类的doXXX方法,如果Servlet没有重写对应的doXXX方法,会返回http.method_(post或者get)_not_supported这个错误信息。

那么,HttpServletRequest这个对象,容器是如何通过客户端发送的请求进行组装,如何传入到Servlet中,Servlet处理完成以后如何通过web.xml的配置打包成ServletResponse并返回的。这个便是我今后研究Tomcat源码的方向,今天暂且看到这里。

你可能感兴趣的:(【Tomcat源码阅读分享】—(2)Servlet源码解析)