-
2021-03-06 22:42:07
小伙伴们知道servlet吗?这次我们要说的是java中的servlet,小伙伴们知道servlet的声明周期都包括哪些吗?下面就听小编介绍介绍吧。
Servlet生命周期包含哪些?
我们要了解,一个Servlet生命周期一共分为三个阶段:
一、初始化阶段 调用init()方法
一般在下列场景Servlet容器会装载Servlet:
1)、Servlet容器启动时自动装载某些Servlet时,实现它只需要在web.XML文件中的之间添加如下代码:1
2)、Servlet容器启动后,客户首次向Servlet发送请求时
3)、Servlet类文件被更新后,重新装载Servlet时
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在一个Servlet的整个生命周期内,init()方法只会被调用一次。
二、响应客户请求阶段 调用service()方法
一般对于用户到达Servlet的请求,Servlet容器会创建一个特定于这个请求的ServletRequest对象与ServletResponse对象,并调用Servlet的service方法。service方法会从ServletRequest对象获得客户请求信息,之后处理这个请求,并通过ServletResponse对象向客户返回响应信息。
三、终止阶段 调用destroy()方法
通常来说,当一个WEB应用被终止,或一个Servlet容器终止运行,或一个Servlet容器重新装载Servlet新实例时,Servlet容器会优先调用Servlet中的destroy()方法,这个destroy()方法能够释放掉Servlet所占用的资源。
Servlet一般何时被创建?
1)、在全部默认情况下,web客户端第一次请求访问某个Servlet的时候,WEB容器就会创建这个Servlet的实例。
2)、在web.xml文件中,如果元素指定了子元素时,Servlet容器就会在启动web服务器时,按顺序创建并初始化Servlet对象。
以上就是关于servlet周期的所有内容了,你了解了吗?如果需要了解更多相关servlet常见问题,就请关注奇Q工具网了解详情吧。
推荐阅读:
更多相关内容 -
java_web:servlet的生命周期(5个阶段)
2020-12-18 22:19:01servlet的生命周期:5个阶段 a.加载:加载和卸载由servlet容器自动处理 b.初始化:init(),该方法会在servlet被加载并实例化后执行 c.服务:service(),–>doget(),dopost() d.销毁:destory(),servlet被系统...servlet的生命周期:5个阶段
a.加载:加载和卸载由servlet容器自动处理
b.初始化:init(),该方法会在servlet被加载并实例化后执行
c.服务:service(),–>doget(),dopost()
d.销毁:destory(),servlet被系统回收时执行
e.卸载:加载和卸载由servlet容器自动处理
-
Servlet的生命周期
2019-06-02 17:36:53主要分为以下几个阶段: 加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁 服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时...Servlet的生命周期
servlet的生命周期就是从servlet出现到销毁的全过程。主要分为以下几个阶段:
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法
init(ServletConfig conf)
,该servlet对象去处理所有客户端请求,service(ServletRequest req,ServletResponse res)
方法中执行,最后服务器关闭时,才会销毁这个servlet对象,执行destroy()
方法。其中加载阶段无法观察,但是初始化、服务、销毁阶段是可以观察到的。public class EmpServlet extends HttpServlet{ //初始化servlet,调用init方法 @Override public void init() throws ServletException { System.out.println("初始化时调用"); } //开启服务 @Override protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { System.out.println("开启服务时调用"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } //销毁时调用destory @Override public void destroy() { System.out.println("销毁时调用"); } }
思考问题
为什么创建的servlet是继承自httpServlet,而不是直接实现Servlet接口?解答:
首先我们来看下源码,HttpServlet的继承结构
HttpServlet继承了GenericServlet,GenericServlet是一个通用的Servlet,那么他的作用是什么呢?大概的就是将实现Servlet接口的方法,简化编写servlet的步骤。
GenericServlet的继承结构:
实现了Servlet接口和ServletConfig接口Servlet接口的内容
public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy(); }
从这里可以看到,Servlet生命周期的三个关键方法,init、service、destroy。还有另外两个方法,一个getServletConfig()方法来获取ServletConfig对象,ServletConfig对象可以获取到Servlet的一些信息,ServletName、ServletContext、InitParameter、InitParameterNames、通过查看ServletConfig这个接口就可以知道
public interface ServletConfig { String getServletName(); ServletContext getServletContext(); String getInitParameter(String var1); Enumeration<String> getInitParameterNames(); }
其中ServletContext对象是servlet上下文对象,功能有很多,获得了ServletContext对象,就能获取大部分我们需要的信息,比如获取servlet的路径,等方法。
到此,就知道了Servlet接口中的内容和作用,总结起来就是,三个生命周期运行的方法,获取ServletConfig,而通过ServletConfig又可以获取到ServletContext。而GenericServlet实现了Servlet接口后,也就说明我们可以直接继承GenericServlet,就可以使用上面我们所介绍Servlet接口中的那几个方法了,能拿到ServletConfig,也可以拿到ServletContext,不过那样太麻烦,不能直接获取ServletContext,所以GenericServlet除了实现Servlet接口外,还实现了ServletConfig接口,那样,就可以直接获取ServletContext了。
上图我们观察到,init方法存在两个,一个带参,一个无参private transient ServletConfig config; public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); } public void init() throws ServletException { } public ServletConfig getServletConfig() { return this.config; }
通过这几个方法一起来讲解,首先看init(ServletConfig config)方法,因为只有init(ServletConfig config)中带有ServletConfig对象,为了方便能够在其他地方也能直接使用ServletConfig对象,而不仅仅局限在init(ServletConfig config)方法中,所以创建一个私有的成员变量config,在init(ServletConfig config)方法中就将其赋值给config,然后通过getServletConfig()方法就能够获取ServletConfig对象了,这个可以理解,但是在init(ServletConfig config)中,158行,还调用了一个init()方法,并且这个init()方法是空的,什么读没有,这是为什么呢?这个原因是为了防止一件事情,当我们需要在init方法中做一点别的事情,我们想到的方法就是继承GenericServlet并且重写了init(ServletConfig config)方法,这样依赖,就破坏了原本在GenericServlet类中init(ServletConfig config)写的代码了,也就是在GenericServlet类中的成员变量config会一直是null,无法得到赋值,因为被重写了,就不会在执行GenericServlet中init(ServletConfig config)方法中的代码。要想赋值,就必须在重写的init(ServletConfig config)方法中调用父类的init(ServletConfig config)方法,也就是super.init(ServletConfig config),这样一来,就很不方便,怕有时候会忘了写这句代码,所以在GenericServlet类中增加一个init()方法,以后需要在init方法中需要初始化别的数据,只需要重写init()这个方法,而不需要去覆盖init(ServletConfig config)这个方法,这样设计,就好很多,不用在管init(ServletConfig config)这个其中的内容了。也不用出现其他的问题。
总结:
Servlet的生命周期分为:加载阶段、实例化阶段、初始化阶段、服务阶段、销毁阶段。上面我们说了servlet默认是第一次被访问的时候初始化的,这种情况当用户要使用的时候才创建,也可以在服务器一启动的时候就创建好servlet(这种方式一般不用),要实现这样的操作需要进行配置,在web.xml中进行配置
-
【Servlet】Servlet生命周期
2021-02-14 19:33:35Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程。Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程。
Servlet程序本身不直接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期。
Servlet生命周期可分为四个阶段:实例化、初始化、处理请求、销毁。
- Servlet加载和实例化
- 在Servlet容器启动后,客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet 对象的service方法。
- 在为Servlet配置了自动装入选项(load-on-startup)时,服务器在启动时会自动装入此Servlet。
- Servlet初始化
- Servlet实例化后,Servlet容器将调用Servlet的init方法来对Servlet实例进行初始化,如果初始化成功,Servlet在Web容器中会处于服务可用状态;如果初始化失败,Servlet容器会销毁该实例。
- 当Servlet运行出现异常时,Servlet容器会使该实例变为服务不可用状态。
- Servlet请求处理
- 服务器接收到客户端请求,会为该请求创建“请求”对象和“响应”对象,并调用service()方法,service()方法再调用其他方法来处理请求。
- 在Servlet生命周期中,service()方法可能被多次调用。当多个客户端同时访问某个Servlet的service()方法时,服务器会为每个请求创建一个线程,这样可以并行处理多个请求,减少请求处理的等待时间,提高服务器的响应速度。但同时也要注意对同一对象的并发访问问题。
- Servlet服务终止
- 当Servlet容器需要终止Servlet(如Web服务器被关闭或需要出让资源),它会先调用Servlet的destroy()方法使其释放正在使用的资源。
- 在调用destroy()方法之前,必须让当前正在执行service()方法的任何线程完成执行,或者超过了服务器定义的时间限制。
- 在destroy()方法完成后,Servlet容器必须释放Servlet实例以便被垃圾回收。
- Servlet加载和实例化
-
Servlet的生命周期有哪些?
2022-05-15 09:39:05生命周期分成哪几个阶段? 实例化(创建) 初始化(容器调用servlet对象的init方法。) 就绪(调用) 销毁 实例化(创建) 容器创建servlet实例(对象) 什么时候实例化? 情形1:容器收到请求之后。 情形2:... -
Servlet的生命周期及每个阶段使用的方法
2016-11-06 19:14:15Servlet的生命周期及每个阶段使用的方法 -
简述servlet生命周期
2019-06-26 16:02:55servlet生命周期 主要有三个方法: init()初始化阶段 service()处理客户端请求阶段 destroy()终止阶段 初始化阶段: Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init... -
javaweb servlet的生命周期
2021-11-17 10:00:07servlet的生命周期大致分为3个阶段,分别是初始化阶段,运行阶段和销毁阶段。 1.初始化阶段: init(ServletConfig config)初始化方法;首次访问这个servlet,servlet对象会被创建,执行一次。 2.运行阶段: servlet... -
了解Servlet的生命周期
2022-05-15 16:40:08一.Servlet的生命周期主要分为以下几个阶段: 1.加载类; 2.Servlet 初始化后调用 init () 方法; 3.Servlet 调用 service() 方法来处理客户端的请求; 4.Servlet 销毁前调用 destroy() 方法; 5.最后,Servlet... -
Servlet生命周期、工作步骤
2020-11-27 22:57:51Servlet的生命周期分为五个阶段:加载,创建,初始化,处理客户请求,卸载,Servlet工作步骤。 加载 创建 初始化 处理客户请求 卸载 工作步骤 加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet 创建:... -
JavaBean、MVC模式、Servlet、Servlet生命周期:5个阶段
2020-04-24 21:39:32注: web.xml中的 / :代表项目根路径 例:http://localhost:8888/XXX/ jsp中的 / :服务器根路径 例:http://localhost:8888/ Servlet生命周期:5个阶段 加载 初始化:init(),该方法会在Servlet被加载并实例化的... -
Servlet生命周期
2017-09-27 09:50:25Servlet生命周期简介:理解一个对象在程序中的存活时间,有利于提高代码质量。也是剖析每个程序运行原理的关键。 一、对象的生命周期1. 创建阶段(Created) 被实例化(new)调用构造器时· Jvm为对象分配存储空间... -
servlet生命周期
2020-09-24 15:40:35主要有三个方法: init()初始化阶段 service()处理客户端请求阶段 destroy()终止阶段 初始化阶段: Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init()方法只会... -
servlet生命周期+++idea创建一个java的servlet项目
2020-11-08 20:33:44servlet生命周期及idea实现 说生命周期之前我们还是先讲讲servlet的工作原理 客户发送一个请求,Servlet调用service()方法对请求进行响应,service()方法会对请求的方法进行匹配,进入相应的逻辑层,完成请求的响应... -
Servlet生命周期分为三个阶段
2012-09-13 11:23:14Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: ... -
servlet的生命周期及其相关方法
2019-03-20 21:26:561.servlet的生命周期 1)实例化,有web容器实例化servlet实例 2)初始化,容器调用init()方法 3)服务,客户端请求servlet时,容器调用service()方法 4)销毁,结束服务,调用destroy()方法 2. 相关方法: ... -
Servlet生命周期及使用小细节
2021-06-08 17:42:22Servlet生命周期及使用小细节Servlet生命周期Servlet创建时间...Servlet的生命周期主要分为以下几个阶段:构造器—>初始化init—>请求服务service—>销毁阶段destory,我们可以通过自己写一个Servlet类去继承H -
Servlet的生命周期及调用方法
2021-10-28 17:08:46Servlet的生命周期包括:创建、初始化、执行、销毁四大阶段。 1、创建:在启动Tomcat的过程中,会根据配置文件来决定Servlet实例何时创建,默认在第一次被访问时创建,可以通过配置web.xml中的<load-on-startup&... -
Servlet 生命周期
2019-06-30 20:29:28一个 Servlet 的生命周期由实例化,初始化,提供服务,销毁,被回收 几个步骤组成 实例化 当用户通过浏览器输入一个路径,这个路径对应的 Servlet 被调用的时候,该 Servlet 就会被实例化。 为 LoginServlet 显式...