servlet生命周期:
1.初始化阶段:
会调用init()方法
2.响应用户请求阶段:
会调用service()方法
3.终止阶段:
会调用destory()方法
servlet初始化阶段:
下列时刻容器会装载servlet
1.当一个servlet的配置文件中<servlet></servlet>标签下配置了<load-on-startup>1</load-on-startup>,servlet容器会首先加载这个servlet;
注意:在web.xml文件中,某些Servlet只有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。
2.当容器启动后,用户首次向servlet发送请求
3.servlet类文件被更新后,重新装载servlet
当servlet被加载后,容器会创建一个servlet实例,并调用init()方法进行初始化,在servlet的整个生命周期中init()方法只被调用一次。
Servlet响应请求阶段:
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从 ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
private
Hashtable<String String[]> paramHashStringArray =
new
Hashtable<String String[]>();
|
这是一个String-->String[]的键值映射。
HashMap线程不安全的,Hashtable线程安全。
Servlet终止阶段:
当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。