精华内容
下载资源
问答
  • servlet对象在什么时候创建
    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:23
    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方法。
    • 用户继续发送第二次请求,控制台输出了以下内容:

            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方法当中,进行资源的关闭。马上对象要被销毁了,还有什么没有关闭的,抓紧时间关闭资源。还有什么资源没保存的,抓紧时间保存一下。

    看完后,再来复习一下

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 2、默认的情况下,Http服务器接收到对于Servlet接口实现类第一次请求时自动创建这个Servlet接口实现类的实例对象。手动配置情况下,可以要求实例对象创建的时机: ...
  • servlet实例对象什么时候创建

    千次阅读 2015-03-11 09:03:00
    容器启动的时候具体的:创建Servlet对象的时机1、Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。...
  • servlet什么时候初始化或者servlet创建时机? 分为两种情况: 1.默认情况下第一次请求时初始化; 2.可以通过load-on-startup 节点( load-on-startup属性值只能为整数 ) 来指定Servlet启动顺序,: (1)当节点值为...
  • 资料总详细说明了Servlet的域对象的生命周期的解释。  何时创建和销毁的  如何存取数据  作用范围
  • Servlet对象生命周期

    2022-04-23 15:23:30
    Servlet对象什么时候被创建? Servlet对象什么时候被销毁? Servlet对象对象创建了几个? Servlet对象的生命周期表示:一个Servlet对象从出生到最后的死亡,整个过程是怎样的。 Servlet对象是由谁来维护的? Servlet...
  • 1/ 如果配置了load-startup,那么当服务器启动时就创建 2/ 没有配置时,当第一次请求到达时创建
  • servlet一般什么时候销毁

    千次阅读 2021-03-15 23:55:32
    Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于...而servlet在什么时候被销毁呢?当服务器不再需要Servlet实例或重新装入时,会调用destroy方法去销毁servlet...
  • 前言: B站学习之后笔记: 动力节点最新JavaWeb视频... Servlet对象创建了几个? Servlet生命周期表示:一个Servlet对象从出生到最后死亡,整个过程是什么样的。 Servlet由谁来维护? Ser
  • Servlet作用域对象

    千次阅读 多人点赞 2022-04-09 11:25:32
    servlet有三大作用域对象: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:08
    1、什么是生命周期? 生命周期表示一个java对象从最初被创建到最终被销毁,经历的所有过程。 2、Servlet对象的生命周期是谁来管理...Servlet对象从最初的创建,方法的调用,以及最后对象的销毁,这个过程,是由Web容器
  • 1.什么Servlet Servlet 运行服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容。 2....
  • Servlet的生命周期:构造...这种方式只有访问的时候servlet才创建,那么如何启动web的时候,就自动初始化,运行init方法,创建servlet对象呢?? 方式一:web.xml中添加<load-on-startup>1</load-on...
  • 0 即负数的情况下,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中的HttpRequestServlet对象为我们提供了一下两种创建并获取HttpSession对象的方法: <1>HttpSession session = request.getSession(boolean value); <2>HttpSession Session = request....
  • 如何在Servlet创建使用application对象在Servlet创建使用application对象其实很简单如下: this.getServletContext.setAttribute("…","…"); 注意: this.getServletContext这个方法的...
  • 2.实例化一个servlet 创建Servlet对象 3.init方法 做一些初始化工作..比如从web.xml文件中读取配置信息 4.service方法 来处理客户端请求 判断请求类型get 调用doGet,post 调用doPost 该方法中完成 5.destroy...
  • 二.HttpSession对象创建 三.HttpSession对象的使用 四.HttpSession的销毁方式 五.通过HttpSession实现客户端与服务端会话的维持 六.HttpSession生命周期 七.HttpSession对象总结 1.HttpSession与Cookie的...
  • servlet什么时候被实例化?【转】

    千次阅读 2017-11-13 09:14:16
    servlet什么时候被实例化?【转】 如果没有设置loadOnStartup,则第一次请求的时候实例化 分三种情况: loadOnStartup 即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化 ...
  • servlet> <servlet-name>myservlet</servlet-name> <servlet-class>tom.jiafei.Dalian</servlet-class> </servlet> <servlet-mapping> <servlet-name>myserv...
  • Servlet什么时候初始化?

    千次阅读 2017-12-02 09:32:08
    Servlet什么时候初始化? 最近面试遇到了这样一道题,面试官问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:10
    request 对象是 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,查看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 327,717
精华内容 131,086
关键字:

servlet对象在什么时候创建