Servlet对象生命周期(三)

104 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言:继续上文的Servlet对象生命周期的学习~

  • 请问:destroy方法调用的时候,对象销毁了还是没有销毁呢?

    • destroy方法执行的时候AServlet对象还在,没有被销毁。destroy方法执行结束之后,AServlet对象的内存才会被Tomcat释放。
  • 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方法当中,进行资源的关闭。马上对象要被销毁了,还有什么没有关闭的,抓紧时间关闭资源。还有什么资源没保存的,抓紧时间保存一下。