`
李楚男
  • 浏览: 114702 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Servlet生命周期

 
阅读更多
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线程的程序。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics