-
2022-04-03 10:36:39
客户端第一次访问该Servlet时被创建,当容器退出时被销毁
Filter在容器启动时被创建,当容器退出时被销毁
更多相关内容 -
Servlet这个对象在什么时候被创建?
2018-04-02 20:48:10首先Servlet实例为一个单例对象,从头到尾只有一个,而其创建在于第一次被调用(第一次处理请求),这是一种默认行为。既然说是默认了,那么你也想到了,肯定可以手动更改了?当然,猜想正确。其可以通过修改web.xml...首先Servlet实例为一个单例对象,从头到尾只有一个,而其创建在于第一次被调用(第一次处理请求),这是一种默认行为。
既然说是默认了,那么你也想到了,肯定可以手动更改了?当然,猜想正确。
其可以通过修改web.xml这个配置文件:
<servlet>
<load-on-startup>1</load-on-startup></servlet>
通过增加<load-on-startup>1</load-on-startup>属性可以将servlet对象的创建修改为:服务器启动时就创建该对象。
-
Servlet一般在什么时候被销毁?
2020-12-03 20:13:38而servlet是在什么时候被销毁呢? 当服务器不再需要Servlet实例或重新装入时,会调用destroy方法去销毁servlet,使用这个方法,Servlet可以释放掉所有在init方法申请的资源。一个Servlet实例一旦终止,就.Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户相互作用定位图形等服务。而servlet是在什么时候被销毁呢?
当服务器不再需要Servlet实例或重新装入时,会调用destroy方法去销毁servlet,使用这个方法,Servlet可以释放掉所有在init方法申请的资源。一个Servlet实例一旦终止,就不允许再次被调用,只能等待被卸载。
可以顺便回顾浏览一下servlet的生命周期:
-
加载跟实例化Servlet ,当启动Servlet容器时,容器首先查找一个配置文件web.xml,这个文件中记录了可以提供服务的Servlet。每个Servlet被指定一个Servlet名,也就是这个Servlet实际对应的Java的完整class文件名。Servlet容器会为每个自动装入选项的Servlet创建一个实例。所以,每个Servlet类必须有一个公共的无参数的构造器。
Servlet 通过调用 构造 方法进行实例化,构造方法必须为无参构造方法。默认是在第一次被访问的时候构造对象。也可以在web.xml中通过N配置Servlet被创建的时机。(N为一个整数表示优先级,>=0表示在web服务器启动的时候创建,<0表示第一次访问时创建)
web.xml配置文件配置servlet
-
初始化 当Servlet被实例化后,Servlet容器将调用每个Servlet的init方法来实例化每个实例,执行完init方法之后,Servlet处于“已初始化”状态。所以说,一旦Servlet被实例化,那么必将调用init方法。通过Servlet在启动后不立即初始化,而是收到请求后进行。在web.xml文件中用 … 对Servlet进行预先初始化。初始化失败后,执行init()方法抛出ServletException异常,Servlet对象将会被垃圾回收器回收,当客户端第一次访问服务器时加载Servlet实现类,创建对象并执行初始化方法。
-
请求处理
Servlet 被初始化以后,就处于能响应请求的就绪状态。每个对Servlet 的请求由一个Servlet Request 对象代表。Servlet 给客户端的响应由一个Servlet Response对象代表。对于到达客户机的请求,服务器创建特定于请求的一个“请求”对象和一个“响应”对象。调用service方法,这个方法可以调用其他方法来处理请求。
Service方法会在服务器被访问时调用,Servlet对象的生命周期中service方法可能被多次调用,由于web-server启动后,服务器中公开的部分资源将处于网络中,当网络中的不同主机(客户端)并发访问服务器中的同一资源,服务器将开设多个线程处理不同的请求,多线程同时处理同一对象时,有可能出现数据并发访问的错误。
另外注意,多线程难免同时处理同一变量时(如:对同一文件进行写操作),且有读写操作时,必须考虑是否加上同步,同步添加时,不要添加范围过大,有可能使程序变为纯粹的单线程,大大削弱了系统性能;只需要做到多个线程安全的访问相同的对象就可以了。 -
销毁servlet
Servlet 通过调用 destroy() 方法终止(结束).当服务器不再需要Servlet实例或重新装入时,会调用destroy方法,使用这个方法,Servlet可以释放掉所有在init方法申请的资源。一个Servlet实例一旦终止,就不允许再次被调用,只能等待被卸载。
Servlet一旦终止,Servlet实例即可被垃圾回收,处于“卸载”状态,如果Servlet容器被关闭,Servlet也会被卸载,一个Servlet实例只能初始化一次,但可以创建多个相同的Servlet实例。如相同的Servlet可以在根据不同的配置参数连接不同的数据库时创建多个实例。 -
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
-
以上就是servlet一般什么时候销毁的详细内容,更多请关注php中文网其它相关文章!
-
-
Servlet对象的生命周期
2022-03-06 10:58:23Servlet对象的生命周期什么是Servlet对象的生命周期Servlet对象...Servlet对象创建了几个? Servlet对象的生命周期表示:一个Servlet对象从出生在最后的死亡,整个过程是怎样的。 我们不需要在程序创建Servlet的对象,Servlet对象的生命周期
JavaWeb系列教程,持续更新中
JavaWeb—Servlet
模拟Servlet本质
使用IDEA开发Servlet程序
Servlet对象的生命周期
适配器(GenericServlet)改造Servlet
ServletConfig
Servlet–ServletContext
如果大家觉得有帮助的话,不妨动动小手,点赞收藏一波,也方便后面的复习哈
大家可以先看看大纲,这个思维导图是对下面内容的总结,先有个印象,具体内容再往后看
什么是Servlet对象的生命周期
- Servlet对象什么时候被创建。
- Servlet对象什么时候被销毁。
- Servlet对象创建了几个?
- Servlet对象的生命周期表示:一个Servlet对象从出生在最后的死亡,整个过程是怎样的。
我们不需要在程序创建Servlet的对象,也没有去调用对象上的方法。Servlet对象的生命周期由web服务器负责
Servlet对象是由谁来维护的?
- Servlet对象的创建,对象上方法的调用,对象最终的销毁,Javaweb程序员是无权干预的。
- Servlet对象的生命周期是由Tomcat服务器(WEB Server)全权负责的。
- Tomcat服务器通常我们又称为:WEB容器。(这个叫法你要知道【WEB Container】)
- WEB容器来管理Servlet对象的死活。
思考:我们自己new的Servlet对象受WEB容器的管理吗?
- 我们自己new的Servlet对象是不受WEB容器管理的。
- WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),只有放到这个HashMap集合中的Servlet才能够被WEB容器管理,自己new的Servlet对象不会被WEB容器管理。(自己new的Servlet对象不在容器当中)
- web容器底层应该有一个HashMap这样的集合,在这个集合当中存储了Servlet对象和请求路径之间的关系
key对应请求路径,value对应我们写的servlet程序
研究:服务器在启动的Servlet对象有没有被创建出来(默认情况下)?
-
在Servlet中提供一个无参数的构造方法,启动服务器的时候看看构造方法是否执行。
-
经过测试得出结论:默认情况下,服务器在启动的时候Servlet对象并不会被实例化。
-
这个设计是合理的。用户没有发送请求之前,如果提前创建出来所有的Servlet对象,必然是耗费内存的,并且创建出来的Servlet如果一直没有用户访问,显然这个Servlet对象是一个废物,没必要先创建。
-
怎么让服务器启动的时候创建Servlet对象呢?
-
在servlet标签中添加子标签,在该子标签中填写整数,越小的整数优先级越高。我写负数时,测试出来也不会创建对象
<servlet> <servlet-name>aservlet</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.AServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>aservlet</servlet-name> <url-pattern>/a</url-pattern> </servlet-mapping>
Servlet对象生命周期
- 默认情况下服务器启动的时候AServlet对象并没有被实例化
- 下面这个是我用来测试Servlet生命周期写的
public class AServlet implements Servlet { public AServlet() { System.out.println("AServlet无参数构造方法执行了"); } @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("AServlet's init method execute!"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("AServlet's service method execute!"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("AServlet's destroy method execute!"); }
- 用户发送第一次请求的时候,控制台输出了以下内容:
AServlet无参数构造方法执行了 AServlet's init method execute! AServlet's service method execute!
-
根据以上输出内容得出结论:
- 用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了。并且执行的是无参数构造方法。)
- AServlet对象被创建出来之后,Tomcat服务器马上调用了AServlet对象的init方法。(init方法在执行的时候,AServlet对象已经存在了。已经被创建出来了。) - 用户发送第一次请求的时候,init方法执行之后,Tomcat服务器马上调用AServlet对象的service方法。
- 用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了。并且执行的是无参数构造方法。)
-
用户继续发送第二次请求,控制台输出了以下内容:
AServlet's service method execute!
-
根据以上输出结果得知,用户在发送第二次,或者第三次,或者第四次请求的时候,Servlet对象并没有新建,还是使用之前创建好的Servlet对象,直接调用该Servlet对象的service方法,这说明:
- 第一:Servlet对象是单例的(单实例的。)(但是要注意:Servlet对象是单实例的,但是Servlet类并不符合单例模式。我们称之为假单例。之所以单例是因为Servlet对象的创建我们javaweb程序员管不着,这个对象的创建只能是Tomcat来说了算,Tomcat只创建了一个,所以导致了单例,但是属于假单例。真单例模式,构造方法是私有化的。)
- 第二:无参数构造方法、init方法只在第一次用户发送请求的时候执行。也就是说无参数构造方法只执行一次。init方法也只被Tomcat服务器调用一次。
- 第三:只要用户发送一次请求:service方法必然会被Tomcat服务器调用一次。发送100次请求,service方法会被调用100次。
-
关闭服务器的时候,控制台输出了以下内容:
AServlet's destroy method execute!
-
通过以上输出内容,可以得出以下结论:
- Servlet的destroy方法只被Tomcat服务器调用一次。
- destroy方法是在什么时候被调用的?
- 在服务器关闭的时候。
- 因为服务器关闭的时候要销毁AServlet对象的内存。
- 服务器在销毁AServlet对象内存之前,Tomcat服务器会自动调用AServlet对象的destroy方法。
-
请问:destroy方法调用的时候,对象销毁了还是没有销毁呢?
- destroy方法执行的时候AServlet对象还在,没有被销毁。destroy方法执行结束之后,AServlet对象的内存才会被Tomcat释放。因为destroy方法不是静态方法,它是实例方法,需要有对象才能调用。
-
Servlet对象更像一个人的一生:
- Servlet的无参数构造方法执行:标志着你出生了。
- Servlet对象的init方法的执行:标志着你正在接受教育。
- Servlet对象的service方法的执行:标志着你已经开始工作了,已经开始为人类提供服务了。
- Servlet对象的destroy方法的执行:标志着临终。有什么遗言,抓紧的。要不然,来不及了。
-
关于Servlet类中方法的调用次数?
- 构造方法只执行一次。
- init方法只执行一次。
- service方法:用户发送一次请求则执行一次,发送N次请求则执行N次。
- destroy方法只执行一次。
-
当我们Servlet类中编写一个有参数的构造方法,如果没有手动编写无参数构造方法会出现什么问题?
- 报错了:500错误。
- 注意:500是一个HTTP协议的错误状态码。
- 500一般情况下是因为服务器端的Java程序出现了异常。(服务器端的错误都是500错误:服务器内部错误。)
- 如果没有无参数的构造方法,会导致出现500错误,无法实例化Servlet对象。
- 所以,一定要注意:在Servlet开发当中,不建议程序员来定义构造方法,因为定义不当,一不小心就会导致无法实例化Servlet对象。
-
思考:Servlet的无参数构造方法是在对象第一次创建的时候执行,并且只执行一次。init方法也是在对象第一次创建的时候执行,并且只执行一次。那么这个无参数构造方法可以代替掉init方法吗?
- 不能。
- Servlet规范中有要求,作为javaweb程序员,编写Servlet类的时候,不建议手动编写构造方法,因为编写构造方法,很容易让无参数构造方法消失,这个操作可能会导致Servlet对象无法实例化。所以init方法是有存在的必要的。
-
init、service、destroy方法中使用最多的是哪个方法?
- 使用最多就是service方法,service方法是一定要实现的,因为service方法是处理用户请求的核心方法。
什么时候使用init方法呢?
- init方法很少用。
- 通常在init方法当中做初始化操作,并且这个初始化操作只需要执行一次。例如:初始化数据库连接池,初始化线程池… 我们就想想什么样的代码只执行一次,并且在对象创建后执行
- 什么时候使用destroy方法呢?
- destroy方法也很少用。
- 通常在destroy方法当中,进行资源的关闭。马上对象要被销毁了,还有什么没有关闭的,抓紧时间关闭资源。还有什么资源没保存的,抓紧时间保存一下。
看完后,再来复习一下
-
3、Servlet对象的生命周期以及如何快速创建servlet
2022-04-20 11:26:032、在默认的情况下,Http服务器在接收到对于Servlet接口实现类第一次请求时自动创建这个Servlet接口实现类的实例对象。在手动配置情况下,可以要求实例对象创建的时机: ... -
servlet实例对象是什么时候创建的
2015-03-11 09:03:00容器启动的时候具体的:创建Servlet对象的时机1、Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。... -
servlet什么时候初始化或者servlet的创建时机?
2018-11-21 20:35:20servlet什么时候初始化或者servlet的创建时机? 分为两种情况: 1.默认情况下第一次请求时初始化; 2.可以通过load-on-startup 节点( load-on-startup属性值只能为整数 ) 来指定Servlet启动顺序,: (1)当节点值为... -
Servlet中对象的作用范围.pdf
2019-12-21 20:08:26资料总详细说明了Servlet的域对象的生命周期的解释。 何时创建和销毁的 如何存取数据 作用范围 -
Servlet对象生命周期
2022-04-23 15:23:30Servlet对象什么时候被创建? Servlet对象什么时候被销毁? Servlet对象对象创建了几个? Servlet对象的生命周期表示:一个Servlet对象从出生到最后的死亡,整个过程是怎样的。 Servlet对象是由谁来维护的? Servlet... -
servlet对象是在服务器端还是客户端被创建?
2019-03-22 17:12:021/ 如果配置了load-startup,那么当服务器启动时就创建 2/ 没有配置时,当第一次请求到达时创建 -
servlet一般什么时候销毁
2021-03-15 23:55:32Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于...而servlet是在什么时候被销毁呢?当服务器不再需要Servlet实例或重新装入时,会调用destroy方法去销毁servlet... -
Servlet对象的生命周期(详细版)
2022-04-26 19:32:49前言: B站学习之后笔记: 动力节点最新JavaWeb视频... Servlet对象创建了几个? Servlet生命周期表示:一个Servlet对象从出生到最后死亡,整个过程是什么样的。 Servlet由谁来维护? Ser -
Servlet作用域对象
2022-04-09 11:25:32servlet有三大作用域对象:request、session、application 类型 对象 HttpServletRequest request HttpSession session ServletContext application 作用域对象共享数据相关的方法: 设置作用域中的... -
Servlet 的实例对象
2022-02-01 10:32:51当请求到达服务器的时候,或者在 web.xml 中配置了 init 方法的时候,容器就会自动创建 Servlet 实例。 如果在 web.xml 中配置了 init 方法,那么启动服务器的时候(服务器启动时会完成 Web 应用的部署)就会自动... -
关于Servlet对象的生命周期
2017-02-15 20:18:081、什么是生命周期? 生命周期表示一个java对象从最初被创建到最终被销毁,经历的所有过程。 2、Servlet对象的生命周期是谁来管理...Servlet对象从最初的创建,方法的调用,以及最后对象的销毁,这个过程,是由Web容器 -
servlet 以及ServletContext对象 详解
2019-09-21 22:42:481.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容。 2.... -
Servlet(6) 在启动web的时候就自动初始化运行init方法创建servlet对象
2018-10-07 18:02:07Servlet的生命周期:构造...这种方式只有在访问的时候servlet才创建,那么如何在启动web的时候,就自动初始化,运行init方法,创建servlet对象呢?? 方式一:web.xml中添加<load-on-startup>1</load-on... -
servlet什么时候被实例化?
2019-10-03 22:15:170 即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化 这种情况和没有设置loadOnStartup是一样的。loadOnStartup > 0 web容器启动的时候做实例化处理,顺序是由小到大,正整数小的... -
深入了解tomcat中servlet的创建方式
2020-10-11 12:00:17深入了解tomcat中servlet的创建方式 1什么是servlet 1.1、用官方的话解释: Servlet是oracle公司提供的一门用于开发动态web资源的技术,属于javaEE体系中的一种核心规范。 通俗解释一下:就是我们开发人员所编写的一... -
Servlet对象怎样获得用户的会话对象?
2019-03-22 17:17:28servlet中的HttpRequestServlet对象为我们提供了一下两种创建并获取HttpSession对象的方法: <1>HttpSession session = request.getSession(boolean value); <2>HttpSession Session = request.... -
如何在Servlet中创建使用application对象
2019-03-02 16:31:47如何在Servlet中创建使用application对象 要在Servlet中创建使用application对象其实很简单如下: this.getServletContext.setAttribute("…","…"); 注意: this.getServletContext这个方法的... -
servlet对象被创建后将首先调用init方法还是service方法?
2019-03-22 17:12:472.实例化一个servlet 创建Servlet对象 3.init方法 做一些初始化工作..比如从web.xml文件中读取配置信息 4.service方法 来处理客户端请求 判断请求类型get 调用doGet,post 调用doPost 在该方法中完成 5.destroy... -
深度好文之Servlet技术详解(八)HttpSession对象
2022-05-02 16:27:11二.HttpSession对象的创建 三.HttpSession对象的使用 四.HttpSession的销毁方式 五.通过HttpSession实现客户端与服务端会话的维持 六.HttpSession生命周期 七.HttpSession对象总结 1.HttpSession与Cookie的... -
servlet什么时候被实例化?【转】
2017-11-13 09:14:16servlet什么时候被实例化?【转】 如果没有设置loadOnStartup,则第一次请求的时候实例化 分三种情况: loadOnStartup 即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化 ... -
假设创建servlet的类是tom.jiafei.Dalian,创建的servlet对象的名字是myservlet,应当怎样配置web.xml文件?
2019-03-22 17:13:58servlet> <servlet-name>myservlet</servlet-name> <servlet-class>tom.jiafei.Dalian</servlet-class> </servlet> <servlet-mapping> <servlet-name>myserv... -
Servlet什么时候初始化?
2017-12-02 09:32:08Servlet什么时候初始化? 最近面试遇到了这样一道题,面试官问Servlet什么时候初始化?回答是:在web容器启动的时 候初始化,然后他笑了笑,我就一脸懵逼了。回来之后查了查资料,明白当时的回答是多么的傻! ... -
servlet中init方法是什么时候被调用的
2020-03-12 21:17:48在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象, 对于每一个Servlet实例,init()方法只被调用一次. Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法... -
Servlet九大内置对象
2019-07-11 19:48:10request 对象是 javax.servlet.httpServletRequest 类型的对象。 该对 象代表了客户端的请求信息,主要用于接受通过 HTTP 协议传送到服务器的数据。 (包括头信息. 系统信息. 请求方式以及请求参数等)。request ... -
使用IDEA进行Servlet对象的创建与运行
2020-10-20 20:57:34使用IDEA进行Servlet对象的创建与运行 1.创建一个 JAVA项目: 新建->项目->JAVA模块… 2.输入项目名(以ServletDemo为例) 3.配置Tomcat: ① ②点击“+”->Tomcat Servlet->Local ③ 修改Name,查看...