回到顶部
您的当前位置: 编程语言> JAVA> JAVA基础> WEB开发
Servlet技术-Servlet生命周期
2014-04-18 11:49:53
标签: 原创 Servlet 开发 生命周期
Servlet的生命周期(运行过程)

    Servlet引擎按照下面的过程来调用一个Servlet程序:

    1.接收到访问某个Servlet的HTTP请求之后,Servlet引擎首先检查是否已经装载并创建了该Servlet的实例对象。如果已经装载并创建了给Servlet的实例对象,Servlet引擎则直接执行第4步,否则执行第2步。

    2.装载并创建Servlet的一个实例对象。

    3.调用Servlet实例对象的init()方法,以便执行Servlet的一些初始化工作。

    4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

    5.在一个Web应用程序被停止或重新启动之前, Servlet引擎将卸载其中运行的Servlet。在卸载Servlet之前, Servlet引擎将调用Servlet的destroy()方法,以便在这个方法中执行Servlet的一些清尾工作,例如释放一些被该Servlet占用的资源。 Servlet引擎卸载某个Servlet之后,该Servlet实例对象变成垃圾,等待java虚拟机的垃圾收集器将其彻底从内存中清除。

    在Servlet的整个生命周期内, Servlet只被初始化一次,而对一个Servlet的每次访问请求都导致Servlet引擎调用一次Servlet的service()方法,所以在Servlet的整个生命周期内,它的init()方法只被调用一次,但它的service()方法可能被调用多次,对于每次访问请求, Servlet引擎都会创建一个新的HttpServletRequest请求对象和HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法。在service()方法内部首先从请求对象中获得请求信息,接着处理请求和访问其他资源以获得需要返回的信息,然后调用响应对象的方法将响应内容写入到Servlet引擎的缓冲区中,再由Web服务器发送给客户端。

    浏览器访问Servlet的过程示意图:

    1.浏览器根据用户的请求生成http请求消息,并将其发送给Web容器

    2.Web容器检查内存中是否存在负责处理当前请求的Servlet程序的实例对象,如果不存在,则加载和创建该Servlet对象。

    3.Web容器创建针对该次访问的请求对象(request)和响应对象(response)。请求对象中包含了http的请求信息,从它里面可以获得HTTP请求消息的内容;响应对象用于封装将要回送给浏览器的http响应信息,响应对象中的初始内容为空,但是以后可以调用它的各种方法来生成HTTP响应消息的各个部分。HttpServletRequest对象和 HttpServletResponse对象是Servlet引擎与Servlet程序进行通信的纽带。

    4.Web容器调用Servlet的service(ServletRequest,request,ServletResponse response)方法,并将请求对象和响应对象传递给该方法。

    5.Servlet对象的Service方法从请求对象中读取请求信息,并向响应对象中写入响应头和响应体信息。

    6.Service方法执行完毕后返回。

    7.Web容器从响应对象中读取响应信息。

    8.Web容器将响应信息发送给浏览器处理显示,一次请求响应过程完全结束,request 和response变成垃圾,等待垃圾收集器将其彻底从内存中清除。

    Servlet响应Web容器客户请求流程的UML时序图:

    Servlet生命周期状态图: