一、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 运行原理及生命周期详解 #### 一、Servlet简介 Servlet 是 Java Web 开发中的一个重要组成部分,它主要用于处理客户端发送至服务器端的 HTTP 请求,并返回相应的响应结果。Servlet 技术允许开发者以 ...
本篇文章将深入探讨Servlet的原理,包括其生命周期、执行流程以及如何在实际开发中使用。 首先,我们来了解Servlet的生命周期。Servlet的生命周期分为三个主要阶段:初始化、服务和销毁。在初始化阶段,Servlet容器...
#### 一、Servlet简介与工作流程 Servlet是一种服务器端的Java应用程序,主要用于接收客户端发送的HTTP请求,并返回响应结果。Servlet在Java Web开发中扮演着核心角色,它负责处理用户请求并生成动态网页内容。 在...
Servlet 实验报告.pdf ...本实验报告总结了 Servlet 应用的基本原理和工作流程,并掌握了 Servlet 的方法 init()、destory()、doGet()、doPost()。同时,也掌握了 web 开发的 MVC 模式和 Servlet 的作用。
在本文中,我们将深入探讨Servlet的访问流程、生命周期以及doGet和doPost方法的工作原理。 首先,让我们了解Servlet的访问流程。当用户在浏览器中输入URL并提交请求时,这个请求会被发送到服务器。Tomcat这样的Web...
在MYECLIPS这样的集成开发环境中,我们可以方便地创建、配置和运行Servlet。 Servlet的工作原理可以分为三个主要步骤: 1. **请求**:当客户端(通常是浏览器)发起HTTP请求时,该请求被Web服务器接收。如果请求的...
1. **Servlet生命周期**:Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。当服务器接收到第一个请求时,会加载并初始化Servlet实例,然后为后续请求提供服务,最后在服务器关闭或不再需要Servlet时销毁。 ...
1. **管理Servlet的生命周期**:Servlet容器负责初始化、调度执行及销毁Servlet实例。这意味着当一个HTTP请求到达时,Servlet容器会根据配置信息找到对应的Servlet并执行其`service()`方法;当服务器关闭或重新部署...
本篇文章将围绕jakarta-servletapi-4-src.zip这个源码包,深入剖析Servlet API 4.0的关键特性与实现原理。 一、Servlet接口与生命周期 Servlet接口是所有Servlet的基础,它定义了Servlet的主要方法,如`init()`, `...
总结来说,"Tomcat启动服务运行Servlet"这一主题涵盖了Tomcat服务器的启动流程、Servlet的生命周期以及数据库连接池的概念。在实际开发中,理解这些知识点有助于优化Java Web应用的性能和安全性。
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态、交互式的Web应用程序中起着核心作用。** **1. JSP简介:** JSP是Java平台上的一个标准视图技术,它允许开发人员将HTML或者...
Servlet运行在Web容器(如Tomcat、Jetty)中,容器负责管理和调度Servlet实例。Servlet的生命周期由容器管理,包括加载、初始化、服务和销毁四个阶段。Servlet是线程安全的,多个请求可以共享同一个Servlet实例,...
Servlet运行在Java虚拟机上,通过多线程模型处理并发请求,减少了系统资源的消耗。此外,由于Servlet遵循Java标准API,因此可以在任何支持Java的Web服务器上运行。 二、Servlet的特点 1. 性能优势:Servlet使用线程...
Java Servlet 是一种用于扩展Web...这个简单的Servlet示例为初学者提供了一个基础的学习平台,通过实际操作,可以更好地理解和掌握Servlet的工作原理。在实践中不断探索和学习,逐步提升对Servlet和Web开发的理解。
- **安全性:**由于Servlet运行在服务器端,因此可以实现更高级的安全机制来保护应用程序和数据。 - **灵活性:**Servlet不仅可以生成动态内容,还可以访问数据库、执行业务逻辑等复杂操作。 #### 二、Struts框架...
分析Servlet的源码可以帮助我们更深入地理解其工作原理,例如请求处理流程、线程安全问题、生命周期方法的调用时机等。这对于优化性能和调试问题非常有帮助。 通过学习这个“servlet源码和笔记”,你可以提升自己...
4. **Servlet容器**:Servlet运行在Servlet容器中,如Tomcat、Jetty等。容器负责加载Servlet,管理其生命周期,执行请求响应流程,并提供一系列服务,如会话管理、安全性、国际化等。 5. **HTTP请求和响应**:...