`
jzinfo
  • 浏览: 118175 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

读源码学Servlet(3)Servlet的生命周期

阅读更多


在javax.servlet.Servlet接口中,定义了针对Servlet生命周期最重要的三个方法,按照顺序,依次是init(),Serveice()和destroy()这三个方法.
.

Servlet初始化阶段,包括执行如下四个步骤:
1. servlet容器(如tomcat)加载servlet类,读入其.class类文件到内存
2. servlet容器开始针对这个servlet,创建ServletConfig对象
3. servlet容器创建servlet对象
4. servlet容器调用servlet对象的init(ServletConfig config)方法,在这个init方法中,建立了sevlet对象和servletConfig对象的关联,执行了如下的代码:

 

 

    public void init(ServletConfig config) throws ServletException 
    {   
      this.config = config;  //将容器创建的servletConfig 对象传入,并使用私有成员变量引用该servletConfig对象   
      this.init();    
    }

 

 

通过以上的初始化步骤建立了servlet对象和sevletConfig对象的关联,而servletConfig对象又和当前容器创建的ServleContext对象获得关联.

 

运行时阶段:
当容器接受到访问特定的servlet请求时,针对这个请求,创建对应的ServletRequest对象和ServletResponse对象,并调用servlet的service()方法,service()根据从ServletRequest对象中获得客户的请求信息
并将调用相应的doxxx方法等进行响应,再通过ServletResponse对象生成响应结果,然后发送给客户端,最后销毁创建的ServletRequest 和ServletResponse

 

 

销毁阶段:
只有当web应用被终止时,servlet才会被销毁。servlet容器现调用web应用中所有的Servlet对象的destroy()方法,然后再销毁这些servlet对象,此外,容器还销毁了针对各个servlet所创建的相关联的serveltConfig对象

以下程序代码演示了Servlet对象的生命周期:

 

/*
 * 本程序代码演示了Servlet周期中init()、serveic()、destroy() 三个方法的调用的情况
 * Author: Laurence Luo 
 * Date; 2009-10-21 
 * 
 * 
 */

package com.longweir;


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class LifeServlet extends HttpServlet
 {  
   private int initvar=0;
    private int servicevar=0;
    private int destroyvar=0;
    private String name;

    //覆盖父类的销毁方法,加入销毁的计数器
  public void destroy() 
  {
        destroyvar++;
        System.out.println(name+">destroy()被销毁了"+destroyvar+"次");
  }

 
    //覆盖父类的init(ServletConfig config)方法 加入计数
  /*  public void init(ServletConfig config) throws ServletException 
  {
    super.init(config);  //调用父类的带参数的init方法
    name=config.getServletName();
    initvar++;
    System.out.println(name+">init():Servlet 被初始化了"+initvar+"次"); 
  
  }*/
 
 
 /* 根据分析GenericServlet的源码,其init(ServletConfig config)方法最终还是会调用了不带参数的init()方法,
  * 所以也可以在自己编写的的servlet中覆盖不带参数的init()方法来加入统计计数
*/
  
  public void init()  //覆盖父类的不带参数的初始化方法
  {
  initvar++;
  //name=getServleConfig.getServletNmae();
  name=getServletName();  //直接返回
  System.out.println(name+"init(): servlet被初始化了了 "+initvar+"次");
  }
 */
 
 
 public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException 
 {
  servicevar++;  //请求服务计数器自增
  System.out.println(name+">service():servlet共响应了"+servicevar+"请求");
  
  String content1="初始化次数: "+initvar;
  String content2="销毁次数: "+destroyvar;
  String content3="请求服务次数 "+servicevar;
  response.setContentType("text/html;charset=GBK");
  PrintWriter out=response.getWriter();
  out.print("<html><head><title>LifeServlet</title></head>");
  out.print("<body>");
  out.print("<h1>"+content1+"</h1><br>");
  out.print("<h1>"+content2+"</h1><br>");
  out.print("<h1>"+content3+"</h1><br>");
  out.print("</body>");
  out.print("</head>");
  out.close();
 }
 

}

 

分享到:
评论

相关推荐

    Servlet 介绍 以及Servlet生命周期(详细)

    **Servlet生命周期** Servlet的生命周期可以分为三个主要阶段:初始化、服务和销毁。 1. **初始化阶段**: - 当Servlet首次被请求或者在web应用启动时,容器(如Tomcat)会加载Servlet类,并调用`init()`方法进行...

    serlvet 源码 servlet-src 源文件

    6. **Servlet生命周期**: - **加载与实例化**:当Web服务器启动或第一次接收到对Servlet的请求时,会加载Servlet类并创建其实例。 - **初始化**:Servlet实例被创建后,会调用`init()`方法进行初始化,一般用于...

    Servlet生命周期与工作原理

    Servlet生命周期主要分为三个阶段:初始化、响应客户请求和终止。下面将详细阐述这三个阶段以及Servlet的工作原理。 1. 初始化阶段: 当Servlet容器(如Tomcat)启动时,可以通过在`web.xml`配置文件中设置`...

    servlet的架构与生命周期

    servlet的架构与生命周期 博文链接:https://shangdiyefankun.iteye.com/blog/126204

    servlet源码 servlet-api-src javax.servlet.Servlet源码

    通过阅读源码,我们可以理解Servlet API的工作机制,了解请求和响应对象的内部实现,以及容器如何管理Servlet的生命周期。这对于优化性能、调试问题以及自定义Servlet行为都非常有帮助。 在实际开发中,我们通常...

    jakarta-servletapi-4-src.zip servlet源码

    在Servlet的生命周期中,`init()`方法在Servlet实例化后首次被调用,用于初始化Servlet;`service()`方法处理客户端请求;而`destroy()`方法在Servlet销毁前执行,用于释放资源。源码中,我们可以看到这些方法的具体...

    servlet-api 源码

    五、Servlet生命周期 1. 加载与实例化:容器根据web.xml或其他配置方式加载Servlet类并创建实例。 2. 初始化:通过调用Servlet的`init()`方法进行初始化,通常在这里进行配置读取和资源初始化。 3. 服务:接收到请求...

    servlet反编译源码

    下面,我们将深入探讨Servlet的基本概念、生命周期、执行流程以及如何通过反编译源码来增强我们的理解。 首先,Servlet是一个Java类,它实现了Servlet接口或者ServletConfig接口。最基础的是javax.servlet.Servlet...

    j2ee17:servlet01:jsp结束,servlet的配置和生命周期

    4. **Servlet生命周期**:Servlet有三个主要阶段:加载与实例化、初始化和服务。当服务器启动或首次接收到Servlet请求时,Servlet容器会加载Servlet类并创建其实例。接着,调用`init()`方法进行初始化,通常用于设置...

    《Servlet和JSP学习指南》源码

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段。开发者可以通过覆盖`service()`方法来处理请求和响应。 2. **JSP基础**:JSP(JavaServer Pages)是一种视图技术,将HTML与Java代码结合,允许开发者在页面...

    tomcat6.0.18源码+servlet API

    开发者可以从中了解Servlet生命周期、过滤器、会话管理、请求和响应对象的使用等核心概念。中文版的文档使得中国开发者能更方便地理解和应用这些知识。 在“压缩包子文件的文件名称列表”中,"Servlet+API[China]....

    Servlet3-sources-code

    在Servlet3中,开发者可以通过在类上使用`@PostConstruct`和`@PreDestroy`注解来定义初始化和销毁方法,从而更好地控制Servlet的生命周期。 4. **WebSocket支持** Servlet3.0规范加入了对WebSocket协议的支持,...

    servlet源码

    `destroy()`在Servlet生命周期结束时调用,用于释放资源;`getServletInfo()`则返回关于Servlet的信息。 2. **GenericServlet类** GenericServlet是Servlet接口的一个抽象实现,提供了默认的服务实现。它使用多...

    javax.servlet源码

    `destroy()`方法在Servlet生命周期结束时调用,用于清理资源。 2. **GenericServlet类**:这是一个抽象类,实现了Servlet接口,提供了通用的生命周期方法实现,但`service()`方法是抽象的,需要子类重写以处理特定...

    jsp 购物车源码 servlet

    2. Servlet生命周期:理解Servlet的初始化、服务和销毁过程,以及如何通过注解或`web.xml`配置Servlet。 3. Session的使用:观察如何在Servlet中创建、获取和更新Session数据,以及设置Session超时。 4. 请求转发和...

    servlet 源码

    1. **Servlet生命周期**: - **加载与实例化**:Servlet容器根据web.xml配置文件或者注解找到Servlet类,并加载其类文件,然后创建Servlet实例。 - **初始化**:Servlet容器调用`init()`方法进行初始化,可以在...

    java servlet 博客源码

    1. **Servlet生命周期**:Servlet经历初始化、服务和销毁三个阶段。开发者可能需要重写`init()`, `service()`, 和 `destroy()` 方法以定制其行为。 2. **HTTP协议**:Servlet处理的是HTTP请求和响应,因此理解HTTP...

    Servlet小例子源码

    常见的Listener有`ServletContextListener`(监听Web应用的生命周期)、`HttpSessionListener`(监听会话的创建和销毁)和`ServletRequestListener`(监听请求的开始和结束)。源码中可能包含这些监听器的实现,帮助...

    韩顺平servlet部分的源码文件

    Servlet生命周期包括初始化、服务、销毁三个阶段,其中服务阶段通过`service()`方法处理客户端请求。 在Servlet中,我们通常会覆盖`doGet()`和`doPost()`方法来处理GET和POST请求。这两个方法是Servlet生命周期的一...

Global site tag (gtag.js) - Google Analytics