听说你JavaWeb学的不好?(九)

47 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

接上

  • 用户继续发送第二次请求,控制台输出了以下内容:

    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方法。
  • 关于Servlet类中方法的调用次数?

    • 构造方法只执行一次。
    • init方法只执行一次。
    • service方法:用户发送一次请求则执行一次,发送N次请求则执行N次。
  • destroy方法只执行一次。

  • 当我们Servlet类中编写一个有参数的构造方法,如果没有手动编写无参数构造方法会出现什么问题?

    • 报错了:500错误。