Servlet运行在Web容器中。Servlet本身不是直接运行在Java虚拟机上,它需要Web容器控制这个载入和运行过程。理解整个过程能够深我们对servlet技术的认识并提高我们的编程技巧。Web容器控制着整个servlet的生命周期,包括:
创建;
初始化;
提供服务;
终止服务;
清除。
1.创建和初始化
servlet在Web程序中以类文件存在(在WEB-INF/classes/目录或WEB-INF/lib目录),在以下情况下,Web容器将Web应用载入并创建应用内的每一个Servlet的一个实例:
当Web服务器启动时;
当第一个用户对servlet的请求传递到Web容器时;
当应用被加入Web服务器时。
因此,一个Servlet在生命周期内只能被初始化一次。
在调用servlet的init()方法初始化servlet时,web容器创建一个servlet设置对象(ServletConfig类的实例)并通过该对象向servlet传递初始参数。这个ServletConfig实例在servlet初始化后一直在内存中存在,直到servlet被清除(destroy)。如果初始化没有问题,servlet在Web容器中成为可以提供服务的状态(available for service);如果初始化失败,Web容器会从运行环境中清除掉(unload)该servlet实例。有时当servlet程序出错时,Web容器会使servlet变为不能服务状态(unavailable for service)。Web程序维护人员也可以设置servlet使用其成为不能服务状态或从不能服务状态恢复成服务状态。
2.处理Web请求
当用户请求传递到Web服务器时,Web服务器产生一个请求(request)对象和一个响应(response)对象。Web容器将这两个对象传递到处于可以服务状态的servlet来让其进行处理。在servlet的对应处理方法内(serivce(),doGet(),doPost()),servlet对request进行分析,将处理结果能过response对象返回给Web容器。Web容器最终将结果通过HTTP协议传回到客户端。
3.终止服务
当Web容器需要终止servlet时(比如Web服务器关闭),它会调用Servlet的destroy()方法使servlet停止服务并被清除掉。与一般的java实例不再被使用的情况一样,Java虚拟机会负责垃圾收集工作。
4.关于多线程service()
一般的Web容器可以支持使用一个Servlet服务多个客户的Http请求,当这些请求几乎同时到达Web服务器时,Web容器可以让servlet在service()方法中使用多线程,这样可以并行处理多个Web请求。另外一种方法是由Web容器创建一个servlet的多个实例,每个servlet实例可以使用其service()方法单独处理Http请求。多线程或多实例都依赖于Web容器管理,虽然servlet编程人员需要理解这些概念,但般不需自己写servlet线程的程序。
分享到:
相关推荐
servlet生命周期演示,便于理解servlet工作流程。
servlet生命周期详解
SERVLET生命周期与JSP生命周期比较
Servlet生命周期与工作原理Servlet使用
达内学习笔记,servlet生命周期,十分详细,保证一看就懂
servlet生命周期详细图解,矢量图。 详细的解释请参考本人博客:http://blog.csdn.net/dwyers/article/details/38435949
servlet生命周期和模版设计模式,包括代码以及相关文档
关于对Servlet声明周期的图例示意!
山寨qq项目1.登录界面教你学会制作qq登录及后台运行。
Servlet 生命周期
Java WEB 篇七 Servlet 生命周期
注:本示例中有5章图片,但因为上传比较麻烦,所以就放在附件中 博文链接:https://lvp.iteye.com/blog/234610
Servlet技术 两条主线 1、HTTP协议 2、Servlet生命周期
从三个阶段来描述servlet的生命周期:初始化阶段、运行阶段和销毁阶段。