Servlet对象生命周期
Servlet对象的生命周期是由服务器(Web容器)全权负责的。
注意:自己创建的Servlet对象是不受Web容器管理
Web容器创建的Servlet对象,这些对象都会放到一个HashMap中,只有放在这个HashMap中的对象才受Web容器管理
默认情况下服务器启动,不会立刻创建Servlet对象,避免资源浪费
控制台中没有写好的打印信息,加入load-on-startup,可以改变Servlet对象创建时机,正整数
重新执行可以看到,打印了相关信息
生命周期:对以下方法进行生命周期的测试,此时没有设置load-on-startup,一般情况下不需要
启动服务:首次访问a会出现以下打印
可看到执行了三个方法,再次发生请求,此次显示只执行了service方法
可以得出结论:首次请求立刻创建对象,执行构造方法、init方法(init方法是对象方法,所以是在对象创建之后执行)
构造方法、init方法只执行一次,假单例,不是真单例,因为真单例需要构造私有化,这里对象只创建一次是因为不允许手动创建,是由服务器创建的Servlet对象
发生请求会执行service方法
关闭服务会执行destroy方法,注意:destroy方法在执行时对象并没有被销毁,因为destroy是实例方法,只有对象还在时才能调用实例方法
在Servlet中编写一个又参数的构造方法,如果没有手动编写无参数构造方法会报错
Servlet规范中有要求,作为JavaWeb程序员,不建议手动编写构造方法,很容易导致无参数构造方法缺少导致对象无法实例化。
因此同样执行一次的初始化方法init是有必要存在的
init方法适合写各种初始化操作,如:初始化数据库连接池、初始化线程池等
service方法是处理用户请求的核心方法
destroy方中法应该编写:资源关闭,保存未保存的资源
idea小盲点:字符串后.sout可以直接生成输出语句