众所周知,Servlet的生命周期在容器里如下:
那我们主要从它的生命周期来分析源码。一般来说,我们开发Sevlet,只需继承HttpServlet这个类即可,其类关系图如下:
Servlet类为实现类提供了init(ServletConfig),service()和destroy()方法,并提供了获取servlet配置信息的方法。
ServletConfig类为servlet的配置信息,相当于配置在web.xml对应servlet的配置信息。
GenericServlet为一个抽象类,实现了init(ServletConfig)方法,初始化了ServletConfig,并调用了init()方法,在此类中,这个方法为空实现,可以在我们自定义的Servlet中重写该方法,同样地,destroy()方法也是如此。
在这个类中,service()方法并没有实现,而是继承下来了,让我们看下子类HttpServlet的service()方法。
在这个方法里,第一步会调用HttpServletRequest中的getMethod获取请求类型,根据各个类型进行转发调用该类的doXXX方法,如果Servlet没有重写对应的doXXX方法,会返回http.method_(post或者get)_not_supported这个错误信息。
那么,HttpServletRequest这个对象,容器是如何通过客户端发送的请求进行组装,如何传入到Servlet中,Servlet处理完成以后如何通过web.xml的配置打包成ServletResponse并返回的。这个便是我今后研究Tomcat源码的方向,今天暂且看到这里。