Servlet生命周期:
Servlet类加载->创建Servlet类实例->Servlet初始化(真正成为一个Servlet)->有请求到来,调用service方法(主要工作)->最后直到Servlet被destroy。
一、Servlet类加载:
1、启动Servlet容器(web容器)后,Servlet容器(web容器)首先会去寻找web应用的部署描述文件(web.xml),从部署描述文件(web.xml)中读取到上下文初始化参数,此时创建一个ServletContext对象,web应用的所有部分共享此上下文;
2、Servlet容器(web容器)为context-param创建String名值对(参数名和参数值均为String类型);
3、Servlet容器(web容器)将名值对交给ServletContext对象;
4、如果在部署描述文件(web.xml)中有Listener标签的话,则创建Listener实例;
5、Servlet容器(web容器)调用Listener的contextInitialized方法,传入ServletContextEvent对象,此对象包含一个ServletContext引用,事件处理代码可以得到上下文初始化参数。
二、创建Servlet类实例:
1、Servlet容器(web容器)读取部署描述文件(web.xml)中的Servlet标签,包括初始化参数(init-param);
2、Servlet容器(web容器)创建ServletConfig实例;
3、Servlet容器(web容器)为servlet初始化参数创建名值对;
4、Servlet容器(web容器)用名值对填充ServletConfig实例;
5、Servlet容器(web容器)创建Servlet类的新实例(一般在第一次请求到来时创建,也可通过设置load-on-start参数在web容器启动时创建)。
三、Servlet的初始化init方法:
1、因为Servlet的init方法在Servlet的一个生命周期中只会被执行一次,init方法是在web容器装入Servlet时执行的,可以通过配置,在启动web服务器时或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init方法。因此调用service方法前,Servlet初始化必须完成;
2、因为在GenericServlet中有两个init方法,其中有参数的init方法,调用了无参的init方法,所以如果需要重写init方法,只需要重写无参的init方法。
综合一、二、三:当启动Servlet容器(web容器)时,容器首先查找一个部署描述文件(web.xml),这个文件中记录了可以提供服务的Servlet,每个Servlet被指定一个Servlet名,也就是这个Servlet实际对应的Java的完整class文件名。Servlet容器会为每个自动装入选项的Servlet创建一个实例。所以,每个Servlet类必须有一个公共的无参数的构造器。当Servlet被实例化后,Servlet容器(web容器)将调用每个Servlet的init方法来实例化每个实例,执行完init方法之后,Servlet处于“已初始化”状态。所以说,一旦Servlet被实例化,那么必将调用init方法。通过Servlet在Servlet容器(web容器)启动后不立即初始化,而是收到请求后进行。在web.xml文件中用<load-on-statup> ...... </load-on-statup>对Servlet进行预先初始化。初始化失败后,执行init()方法抛出ServletException异常,Servlet对象将会被垃圾回收器回收,当客户端第一次访问服务器时加载Servlet实现类,创建对象并执行初始化方法。
四、Servlet的service方法:
service方法是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。每次请求到来时,都会调用service方法,在HttpServlet中,service方法是用于判断请求的方法(不用重写),而去重写doGet方法或doPost方法。
五、Servlet的destroy方法:
在Servlet的生命周期中,仅执行一次destroy()方法,在web服务器端停止且卸载Servlet时执行该方法。因为一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。销毁Servlet实例时调用,调用结束后意味着该Servlet的生命周期已经结束。
综上所述:从容器角度来看,Servlet的生命周期是由Servlet容器(web容器)来控制的,它始于装入web服务器的内存时,并在终止或重新装入Servlet时结束。这项操作一般是动态执行的。然而,web服务器通常会提供一个管理的选项,用于在web服务器启动时强制装载和初始化特定的Servlet;从代码角度来看,Servlet的生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet Engine上运行。javax.servlet.Servlet接口定义了一些方法,在Servlet的生命周期中,这些方法会在特定时间按照一定的顺序被调用。
Servlet运行原理:
相关推荐
### Servlet 运行原理及生命周期详解 #### 一、Servlet简介 Servlet 是 Java Web 开发中的一个重要组成部分,它主要用于处理客户端发送至服务器端的 HTTP 请求,并返回相应的响应结果。Servlet 技术允许开发者以 ...
在Servlet生命周期的初始化阶段,会调用`init()`方法进行初始化操作,例如设置初始化参数。服务阶段,`doGet()`或`doPost()`方法会被调用来处理HTTP请求。这两个方法分别对应HTTP的GET和POST请求类型,通常在这里...
**Servlet生命周期** Servlet的生命周期分为四个阶段:加载和初始化、服务、销毁和卸载。 1. **加载和初始化**:当Servlet容器首次接收到对Servlet的请求,或者通过web.xml或注解配置明确声明需要加载Servlet时,...
Servlet 的生命周期是 SERVLET 的核心概念,理解 SERVLET 的生命周期是非常重要的。SERVLET 的生命周期包括装载、初始化、服务和销毁四个阶段,每个阶段都有其特定的功能和用途。 SERVLET 的初始化参数可以在 web....
#### 三、Servlet生命周期 Servlet的生命周期主要包括三个阶段:初始化、处理请求和销毁。Servlet容器负责管理Servlet的整个生命周期,包括创建、初始化、调用和销毁Servlet实例。当第一次请求到达时,Servlet容器...
Servlet是Java Web开发中...总结,Servlet是Java Web开发的基础,理解其原理和生命周期对于开发高效、稳定的Web应用至关重要。通过源码阅读和实践,我们可以更好地掌握Servlet的工作机制,并利用相关工具提高开发效率。
### Servlet工作原理详解 #### 一、Servlet简介与工作流程 Servlet是一种服务器端的Java应用程序,主要用于接收客户端发送的HTTP请求,...理解Servlet的工作原理及其生命周期管理对于构建高效稳定的Web应用至关重要。
10. **Servlet生命周期** Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。初始化阶段,服务器调用`init()`方法;服务阶段,`service()`方法处理请求;销毁阶段,`destroy()`方法被调用,释放资源。 11. ...
这是Servlet生命周期中的最后一个阶段。 - **导入源码**:为了更好地理解和调试Servlet程序,开发者通常需要导入Servlet相关的源码库,以便查看具体实现细节。 - **多路径映射**:一个Servlet可以通过在`web.xml`...
init()方法是在Servlet生命周期中仅执行一次的方法,它是在服务器装入Servlet时执行的,负责初始化Servlet对象。init()方法可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机...
Servlet 实验报告.pdf ...本实验报告总结了 Servlet 应用的基本原理和工作流程,并掌握了 Servlet 的方法 init()、destory()、doGet()、doPost()。同时,也掌握了 web 开发的 MVC 模式和 Servlet 的作用。
"基于servlet的执行原理与生命周期" 本文将详细解析servlet的执行原理与生命周期,包括servlet容器的管理、servlet的工作过程、servlet的生命周期等。 一、servlet容器的管理 servlet容器是管理servlet的关键组件...
本文将深入讲解Servlet的工作原理,包括Servlet容器的工作方式、Web工程的启动过程、Servlet的解析与分发,以及Servlet生命周期的管理。 首先,Servlet容器是Servlet执行的平台,它提供了一套标准接口,使得Servlet...