1.Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过
avax.servlet.Servlet接口中的init(初始化)、service(处理请求)和destroy(销毁)方法来表示。
(1)加载和实例化
Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例
(2)初始化
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息 。
初始化方法调用一次
(3)请求处理
Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息此后对该实例的任何请求,都将收到容器发送的HTTP 404(请求的资源不可用) 响应HTTP 503(服务器暂时忙,不能处理请求)响应。
Service有两个参数(ServletRequest和ServletResponse),ServletRequest保存了客户向服务器发送的请求,而ServletResponse用来设置如何对客户进行响应。
Service:dogetdopostform中可以写是用method="get"还是method="post" get的话调用doGet() url显示: http://xx.xx.xx/xxxServlet?username=abc+password=abc post的话调用doPost() url显示:http://xx.xx.xx/xxxServlet不管是post还是get方法提交过来的连接,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了。
请求方法调用一次或者 多次
(4)服务终止
当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法
销毁方法调用一次