Servlet的生命周期

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表

示。Servlet的生命周期包含了下面4个阶段:

1.加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器

启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,

成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所

以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

2.初始化

在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,

如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的

ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出

ServletException异常或者UnavailableException异常来通知容器。ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而

UnavailableException异常用于通知容器该Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出

UnavailableException异常向容器指出它暂时或永久不可用。

3.请求处理

Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,

Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。在service

()方法执行期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常。如果UnavailableException异常指示了该实

例永久不可用,Servlet容器将调用实例的destroy()方法,释放该实例。此后对该实例的任何请求,都将收到容器发送的HTTP 404(请求的资源不可用)响应

。如果UnavailableException异常指示了该实例暂时不可用,那么在暂时不可用的时间段内,对该实例的任何请求,都将收到容器发送的HTTP 503(服务器暂

时忙,不能处理请求)响应。

4.服务终止

当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存

储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例

随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务。

时间: 2025-01-20 19:59:57

Servlet的生命周期的相关文章

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

一.http协议回顾: 在上一篇文章中:JavaWeb学习之Servlet(一)----MyEclipse及Tomcat的配置,我们通过在浏览器输入url,就能看到在MyEclipse中编写的Servlet资源,效果如下: 上图中,整个过程是这样的:浏览器中输入url后,会通过hosts文件/dns服务器解析为IP地址,进而找到对应ip地址的服务器. 在这期间,浏览器会通过http协议发出请求.服务器端收到请求后,做了下面这些事: (1)分析出当前请求的是哪台虚拟主机: 查看Host请求头分析出

servlet的生命周期,doGet 及doPost

一个servlet的生命周期由部署servlet的容器来控制.当一个请求映射到一个servlet时,该容器执行下列步骤.1.       如果一个servlet的实例并不存在,Web容器加载servlet类.  创建一个servlet类的实例.调用init初始化servlet实例.该初始化过程将在 初始化servlet中讲述.调用service方法,传递一个请求和响应对象.服务方法将在编写服务方法中讲述.如果该容器要移除这个servlet,可调用 servlet的destroy方法来结束该ser

Servlet开发入门(4) Servlet的生命周期

Servlet的开发标准来说,Servlet是有自己的小框架的,一个标准的Servlet程序要有完整的生命周期,生命周期是什么东西呢?我们来看一下标准的Servlet开发是怎样的. Servlet生命周期 生命周期,是一个程序存在的周期,Servlet由于受到容器的管理,所以容器来决定生命周期. Servlet程序是运行在服务器端的一段Java程序,其生命周期将受到WEB容器的控制,生命周期包括: 加载程序.初始化.服务.销毁.卸载五个部分 生命周期就是如上图所示的,它是一个程序的一个周期. 1

Java Servlet Programming 读书笔记 - servlet生命周期

servlet|笔记 servlet的生命周期一般为: 1.建立初始化servlet 2.处理从客户端的零个或多个请求 3.销毁servlet,gc回收占用内存 每个server可能在如何支持servlet上有不同的方法,但是上述servlet生命周期却是每个servlet 引擎必须遵守的规则. 实例持久化Instance Persistence: 一个servlet 实例一旦加载,就开始处理对这个servlet的所有请求,换句话说就是一个servlet只生成一个实例.这样的做法对于性能的提高很

Servlet和JSP生命周期概述

Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码: 1     <loadon-startup>1</loadon-sta

Servlet生命周期详解

一.基本概念Servlet生命周期分为三个阶段 1.初始化阶段                调用init()方法 2.响应客户请求阶段     调用service()方法 3.终止阶段                   调用destroy()方法 二.详解1.初始化阶段在下列时刻Servlet容器装载Servlet: ①Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的之间添加代码:<load-on-startup>1</load-on-star

hadoop数据流(生命周期)

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;      了解hadoop,首先就需要先了解hadoop的数据流,就像了解servlet的生命周期似的.hadoop是一个分布式存储(hdfs)和分布式计算框架(mapreduce),但是hadoop也有一个很重要的特性:hadoop会将mapreduce计算移动到存储有部分数据的各台机器上. 术语        MapReduce 作业(job)是客户端需要执行的

ServletContext(Servlet上下文对象)作用 生命周期

ServletContext(Servlet上下文对象) 容器提供的对象 作用: 1.相对路径转换为绝对路径 String path = "/mp3/1.jpg"; ServletContext ctx = getServletContext(); String realPath = ctx.getRealPath(path); File file = new File(realPath); 2.可以获取容器的附加信息. 容器名称 容器版本 Servlet规范的版本号 3.全局容器 S

Web---演示servlet技术(servlet生命周期),解决中文乱码问题

本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼(^∇^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Tran