`

Servlet运行周期与原理流程

    博客分类:
  • J2EE
阅读更多

 

一、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运行原理和流程


1、Servlet运行原理


①. WebApplication的标准目录结构:


WEB-INF/classes


/lib


Web.xml


,也就是一个完整的web应用程序目录下,必须包含以上的目录结构。


Classes 文件夹下是项目中用到的类文件,均由JDK编译成了.class文件


Lib文件夹是我们项目中引用的jar包


Web.xml是整个web应用程序的配置文档。


了解了这些,我们再来看Tomcat的工作流程。


②. Tomcat解析URL


a) 首先来看URL中包含的信息:”协议” + “端口号” + “路径(项目名称+文件路径)”


Tomcat启动后,监听我们的8080端口,当有Url请求发过来之后,解析出项目名称 abingtest,然后到webapps目录下搜索到该项目文件夹。


b) 项目文件找到后,开始寻找类文件。


这个时候Tomcat去Web.xml文件中寻找<servlet-mapping> 配置节中包含”servlet/FirstServlet”字符串,进而找到该类文件所在的位置。


③. Servelt中的doGet() 和 doPost() 方法


我们写的FirstServlet 继承了HttpServlet ,重写了HttpServlet中的doGet() 方法,HttpServlet中还有一个doPost()方法。这两个方法都是用来处理Http请求的。Servlet会根据我们提交表单的方法 (method=post/get)调用service方法来自动选择(我们在下一篇文章中来详细说明一下Service方法是如何自动调用 FirstServlet中的doGet()方法的)


2、一个servlet运行流程图:


分享到:
评论

相关推荐

    servlet运行原理及生命周期.pdf

    ### Servlet 运行原理及生命周期详解 #### 一、Servlet简介 Servlet 是 Java Web 开发中的一个重要组成部分,它主要用于处理客户端发送至服务器端的 HTTP 请求,并返回相应的响应结果。Servlet 技术允许开发者以 ...

    servlet原理

    本篇文章将深入探讨Servlet的原理,包括其生命周期、执行流程以及如何在实际开发中使用。 首先,我们来了解Servlet的生命周期。Servlet的生命周期分为三个主要阶段:初始化、服务和销毁。在初始化阶段,Servlet容器...

    servlet工作原理

    #### 一、Servlet简介与工作流程 Servlet是一种服务器端的Java应用程序,主要用于接收客户端发送的HTTP请求,并返回响应结果。Servlet在Java Web开发中扮演着核心角色,它负责处理用户请求并生成动态网页内容。 在...

    Servlet实验报告.pdf

    Servlet 实验报告.pdf ...本实验报告总结了 Servlet 应用的基本原理和工作流程,并掌握了 Servlet 的方法 init()、destory()、doGet()、doPost()。同时,也掌握了 web 开发的 MVC 模式和 Servlet 的作用。

    13-Servlet访问流程以及doGet和doPost.pdf

    在本文中,我们将深入探讨Servlet的访问流程、生命周期以及doGet和doPost方法的工作原理。 首先,让我们了解Servlet的访问流程。当用户在浏览器中输入URL并提交请求时,这个请求会被发送到服务器。Tomcat这样的Web...

    servlet课件(工作原理,处理表单)

    在MYECLIPS这样的集成开发环境中,我们可以方便地创建、配置和运行Servlet。 Servlet的工作原理可以分为三个主要步骤: 1. **请求**:当客户端(通常是浏览器)发起HTTP请求时,该请求被Web服务器接收。如果请求的...

    servlet学习demo程序

    1. **Servlet生命周期**:Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。当服务器接收到第一个请求时,会加载并初始化Servlet实例,然后为后续请求提供服务,最后在服务器关闭或不再需要Servlet时销毁。 ...

    Servlet工作原理解析PDF版

    1. **管理Servlet的生命周期**:Servlet容器负责初始化、调度执行及销毁Servlet实例。这意味着当一个HTTP请求到达时,Servlet容器会根据配置信息找到对应的Servlet并执行其`service()`方法;当服务器关闭或重新部署...

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

    本篇文章将围绕jakarta-servletapi-4-src.zip这个源码包,深入剖析Servlet API 4.0的关键特性与实现原理。 一、Servlet接口与生命周期 Servlet接口是所有Servlet的基础,它定义了Servlet的主要方法,如`init()`, `...

    tomcat启动服务运行servlet

    总结来说,"Tomcat启动服务运行Servlet"这一主题涵盖了Tomcat服务器的启动流程、Servlet的生命周期以及数据库连接池的概念。在实际开发中,理解这些知识点有助于优化Java Web应用的性能和安全性。

    JSP与Servlet核心技术

    **JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态、交互式的Web应用程序中起着核心作用。** **1. JSP简介:** JSP是Java平台上的一个标准视图技术,它允许开发人员将HTML或者...

    servlet源码、流程和应用方法

    Servlet运行在Web容器(如Tomcat、Jetty)中,容器负责管理和调度Servlet实例。Servlet的生命周期由容器管理,包括加载、初始化、服务和销毁四个阶段。Servlet是线程安全的,多个请求可以共享同一个Servlet实例,...

    Servlet教材

    Servlet运行在Java虚拟机上,通过多线程模型处理并发请求,减少了系统资源的消耗。此外,由于Servlet遵循Java标准API,因此可以在任何支持Java的Web服务器上运行。 二、Servlet的特点 1. 性能优势:Servlet使用线程...

    java servlet 最简单的小例子

    Java Servlet 是一种用于扩展Web...这个简单的Servlet示例为初学者提供了一个基础的学习平台,通过实际操作,可以更好地理解和掌握Servlet的工作原理。在实践中不断探索和学习,逐步提升对Servlet和Web开发的理解。

    servlet与struts简介

    - **安全性:**由于Servlet运行在服务器端,因此可以实现更高级的安全机制来保护应用程序和数据。 - **灵活性:**Servlet不仅可以生成动态内容,还可以访问数据库、执行业务逻辑等复杂操作。 #### 二、Struts框架...

    servlet源码和笔记

    分析Servlet的源码可以帮助我们更深入地理解其工作原理,例如请求处理流程、线程安全问题、生命周期方法的调用时机等。这对于优化性能和调试问题非常有帮助。 通过学习这个“servlet源码和笔记”,你可以提升自己...

    servlet规范

    4. **Servlet容器**:Servlet运行在Servlet容器中,如Tomcat、Jetty等。容器负责加载Servlet,管理其生命周期,执行请求响应流程,并提供一系列服务,如会话管理、安全性、国际化等。 5. **HTTP请求和响应**:...

Global site tag (gtag.js) - Google Analytics