Servlet(二)生命周期

Servlet的生命周期可以定义为从其被创建到其被销毁的整个流程,下面是Servlet生命的常规线路:

  • 容器调用init()方法进行Servlet的初始化
  • Servlet调用service()方法去处理客户端的请求
  • 容器调用destroy()方法将Servlet销毁
  • 最后,Servlet被JVM的GC线程当作垃圾处理掉

init()方法:

init()方法只会在创建Servlet时被调用一次,不管有多少用户请求。通常情况下,Servlet在容器第一次接收到用户请求时被创建,但也可以通过load-on-startup指定Servlet在容器启动时将其加载。

当用户调用Servlet时,容器中的每一个Servlet都是以单例模式对外提供服务的,只是会对每一个用户分配一个线程。init()方法内部通常会加载一些在Servlet的生命周期中会用到的数据。

init()方法的定义如下所示:

public void init() throws ServletException {
  // Initialization code...
}

service()方法:

service()方法是Servlet对外提供服务的主方法。Servlet容器会调用该方法处理来自客户端的请求以及将格式化的返回结果返回给客户端。

每当Servlet容器接收到来自客户端的请求时,它会分配一个新的线程并且调用service()方法,然后由service()方法去检测客户端的请求类型,是GET还是POST还是DELETE还是PUT等等,然后在service()方法的内部会依据请求的类型相应的调用doGet,doPost,doDelete,doPut方法。

service()方法的声明如下:

public void service(ServletRequest request,
                    ServletResponse response)
      throws ServletException, IOException{
}

由上可知,针对service()方法,开发人员不需要做任何调整,但是却需要依据请求类型重写被其调用的doGet或doPost方法。doGet和doPost是使用最频繁的两个方法,下面是它们的定义:

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet code
}
public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet code
}

通过URL的普通请求以及未指定METHOD的HTML表单会产生GET模式的请求,因此该类请求会被doGet方法处理;而指定了METHOD的HTML表单会产生POST模式的请求,此时会被doPost方法处理。

destroy()方法:

destroy()方法只会在Servlet的生命到达尽头时被调用一次,该方法会给Servlet去做一些最后扫尾的机会,比如关闭数据库连接,停止后台线程,写cookie列表等。当destroy方法被调用之后,Servlet对象会被标记来“垃圾”,由GC处理掉。destroy()方法的定义如下:

  public void destroy() {
    // Finalization code...
  }

架构图:

上图描述了Servlet的生命周期图:

  • 首先,面向web服务器的HTTP请求会被委托给Servlet容器
  • 其次,servlet容器在调用service()方法之前会先加载servlet
  • 最后,servlet容器会以多线程的方式处理多用户的请求,每个线程都会执行单例的servlet的service()方法。

/******************************外星人乔丹拍板时间******************************/

Servlet的生命,始于被创建时的init()方法,止于完成使命之后的destroy()方法,

生命只会开始一次,即Init() only once,生命也只会终止一次,即destroy() only once,

在生命的浪潮中,这个伟人会提供多次服务,即service() a lot of times

Servlet(二)生命周期

时间: 2024-10-12 19:00:12

Servlet(二)生命周期的相关文章

JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 联系方式:[email protected] 一.http协议回顾: 在上一篇文章中:JavaWeb学习之Servlet(一)----MyEclipse及Tomcat的配置,我们通过在浏览器输入url,就能看到在MyEclipse中编写的Servlet资源,效果如下: 上图中,整个过程是这样的:浏览器中输入url后,会通过hosts文件/dns服务

servlet的生命周期与工作原理、使用!

概念: Servlet是一个java程序运行在服务器上,处理客户端请求并做粗响应的程序!Servlet是和平台无关的服务器组件,它运行在Servlet容器中,Servlet容器 负责servlet和客户端的交互以及调用servlet的doPost.doGet方法,采用“请求”,“响应”的模式! Servlet主要完成一下功能:   1.创建并返回基于客户端的请求的动态页面 2.可嵌入到现有的页面 3.与服务器资源(数据库.java程序)进行通信 Servlet的生命周期:  1.实例,初始化:S

Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)

一.实现Servlet接口 通过实现Servlet接口来了解Servlet的生命周期 (1)以规范的形式创建一个web应用(即在webapps目录下创建一个web应用) 创建web应用 (2)classes目录下创建一个.java(该java文件为实现Servlet接口) 创建文件夹MyFirstServlet.java 代码如下: package com.focus; import javax.servlet.*; import javax.servlet.http.*; import jav

Servlet的生命周期和工作原理

Servlet的生命周期和工作原理 一.Servlet生命周期分为三个阶段:             1).初始化阶段:调用init()方法             2).响应客户端请求阶段:调用service()方法             3).终止阶段:调用destroy()方法        1).初始化阶段:             在下列时刻Servlet容器装载Servlet:                 1.Servlet容器启动时自动装载某些Servlet,实现它只需要在w

servlet的生命周期和servlet的继承关系

一.servlet的生命周期 一个servlet类的对象   加载——>实例化——>初始化——>服务——>销毁 第一次访问某个servlet的时候 首先调用其 构造函数 public  stuServlet(){ System.out.println("servlet被创建了"); } 第一次访问 在构造函数之后调用其init()初始化方法:功能  配置一些初始化参数 public void init() throws ServletException { Sy

service方法、doGet方法、doPost方法的区别和一些常见错误 Servlet的生命周期

1.Service方法和doGet方法和doPost方法的区别 * Service方法:  可以处理get/post方式的请求,如果servlet中有Service方法,会优先调用service方法对请求进行处理. * doGet方法:  处理get方式的请求 如果没有重写此方法,会调用父类,父类会返回405错误 * doPost方法:  处理post方式的请求 如果没有重写此方法,会调用父类,父类会返回405错误 * 注意: * 如果在覆写的service方法中调用了父类的service方法(

Servlet的生命周期

Servlet的生命周期是由Servlet的容器来控制的,它可以分为三个阶段:初始化.运行.销毁1.初始化阶段:(1)Servlet容器加载Servlet类,把Servlet类的.class文件中数据读到内存中:(2)然后Servlet容器创建一个ServletConfig对象.ServletConfig对象包含了Servlet的初始化配置信息:(3)Servlet容器创建一个Servlet对象:(4)Servlet容器调用Servlet对象的init方法进行初始化.2.运行阶段当Servlet

说一说Servlet 的生命周期

答:servlet 有良好的生存期的定义, 包括加载和实例化. 初始化. 处理请求以及服务结束.这个生存期由 javax.servlet.Servlet 接口的 init,service 和 destroy 方法表达.Servlet 被服务器实例化后, 容器运行其 init 方法, 请求到达时运行其 service 方法, service方法自动派遣运行与请求对应的 doXXX 方法( doGet, doPost) 等, 当服务器决定将实例销毁的时候调用其 destroy 方法.web 容器加载

Servlet的生命周期+实现方式

1.Servlet的生命周期:        (1)被创建:            默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法.                一个Servlet只会被创建一次.init()方法也只会被调用一次.                Servlet是单例的.而服务器时多线程的.可能存在线程安全问题.                  为了避免安全问题,在Servlet中尽量不要定义成员变量.即使定义了.也不要进行其他操作(只能查询).

Servlet 的生命周期,Servlet 和CGI 的区别

Servlet 的生命周期:实例化,初始化,提供服务,销毁实例 Web 容器加载Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy 方法. Servlet 和CGI 的区别: 与cgi 的区别在于servlet 处于服务器进程中,它通过多线程方式运行其ser