三九宝宝网宝宝百科宝宝知识

Servlet生命周期

04月12日 编辑 39baobao.com

[项目的生命周期]项目的生命周期描述了项目从开始到结束所经历的各个阶段,最一般的划分是将项目分为 “识别需求、提出解决方案、执行项目、结束项目”四个阶段。实际工作中根据不同领域或不...+阅读

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()方法,为接收到的请求服务。

简述Servlet的运行原理与生命周期

Servlet生命周期分为三个阶段: 1,初始化阶段 :调用init()方法 2,响应客户请求阶段:调用service()方法 3,终止阶段:调用destroy()方法Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的之间添加如下代码:12,在Servlet容器启动后,客户首次向Servlet发送请求 3,Servlet类文件被更新后,重新装载Servlet Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。Servlet工作原理: 首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。

在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。 每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。 Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。

public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException{ HttpRequest request; HttpResponse response; try { req = (HttpRequest)request; res = (HttpResponse)response; }catch(ClassCastException e) { throw new ServletException("non-HTTP request response"); }service(request,response);} 代码的最后调用了HTTPServlet自己的service(request,response)方法,然后根据请求去调用对应的doXXX方法,因为HttpServlet中的doXXX方法都是返回错误信息,protected void doGet(HttpServletRequest res,HttpServletResponse resp) throws ServletException,IOException{String protocol = req.getProtocol(); if(protocol.equals("1.1")) { resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg); }esle { resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg); }}

Servlet的生命周期的过程和相应方法是什么

如果说servlet没有配置load-on-startup属性时,将在第一次被访问时创建(如果有配置,将在服务器启动时创建)在应用程序运行过程中每个servlet类只会被创建一个对象当对象被创建完毕时必须会执行init方法对对象的数据进行初始化,整个应用程度运行过程中该方法只会被执行一次当有请求访问该对象时,servlet容器会调用该对象的service方法,service方法中对请求的类型进行判断如果是get方法则调用重写的doGet方法,如果是post则会调用doPost方法在doXXX方法中对请求进行处理及响应响应后该对象将等待继续访问或者被销毁再销毁之前,容器会调用该对象的destroy方法,然后该对象再被销毁. 请给分,很辛苦的...

以下为关联文档:

什么是软件生命周期模型软件生命周期模型是软件开发的全部过程、活动和任务的结构框架。软件生命周期模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目开发...

软件生命周期模型的其它几种典型的软件生命周期模型其它几种典型的生命周期模型包括迭代模型、快速原型模型、V模型、W模型。 迭代式模型是是RUP(Rational Unified Process,统一软件开发过程,统一软件过程)推荐的周期模型。在RU...

如何理解生命周期理论生命周期(Life Cycle)的概念应用很广泛,在心理学上主要是指人的生命周期和家庭的生命周期,是指它的出生、成长过程、衰老、生病和死亡的过程。 个体生命周期 提起个体生命周期,首...

生命周期的理论方法生命周期理论有两种主要的生命周期方法——一种是传统的、相当机械的看待市场发展的观点(产品生命周期/行业生命周期);另外一种更富有挑战性,观察顾客需求是怎样随着时间演变而...

什么是企业生命周期理论产品生命周期理论是美国哈佛大学教授费农1966年在其《产品周期中的国际投资与国际贸易》一文中首次提出的。费农认为:产品生命是指市上的营销生命,产品和人的生命一样,要经历形...

安卓activity生命周期首先从你的描述来看,你在B跳转到A的时候应该是将Bfinish掉了,所以你从A再次跳转到B的时候,B会重新调用oncreate方法来绘制界面,开始新的生命周期,所以就会出现你所描述的情况。...

android生命周期有什么用在 Android 中,多数情况下每个程序都是在各自独立的 Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;当这个程序没有必要再运行下去且系统需要回收...

软件的生命周期软件生命周期是指从软件定义、开发、使用、维护到报废为止的整个过程,一般包括问题定义、可行性分析、需求分析、总体设计、详细设计、编码、测试和维护。 问题定义就是确定...

软件的生命周期是什么软件的生命周期是指软件的产生直到报废或停止使用的生命周期。 具体分为以下阶段: 一、问题定义:要求系统分析员与用户进行交流,弄清“用户需要计算机解决什么问题”然后提出关...

推荐阅读
图文推荐