Servlet生命周期
1、加载和实例化
Servlet容器加载Servlet类并调用该类的无参构造函数进行Servlet实例化。
2、初始化
1)、Servlet容器准备ServletConfig对象,该对象可以从web.xml文件中获取Servlet配置信息。
2)、Servlet容器调用Servlet对象的init()方法(调用且仅调用一次),该方法接收ServletConfig对象,获取Servlet配置信息并进行初始化。
(一点补充说明:在javax.servlet包中,定义了ServletConfig接口。Servlet容器使用ServletConfig对象在Servlet初始化时向已经实例化的Servlet对象传递配置信息。可以通过ServletConfig对象的getServletContext()方法来得到ServletContext对象。运行在Java虚拟机中的每一个Web应用程序都有一个与之相关的Servlet上下文。Java Servlet API提供了一个ServletContext接口用来表示上下文。在这个接口中定义了一组方法,Servlet可以使用这些方法与它的Servlet容器进行通信,例如:得到文件的MIME类型,转发请求,或者向日志文件中写入日志消息。)
3、请求处理
Servlet容器调用Servlet的service()方法对请求进行处理。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
4、服务终止
当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。