(1)问题分析:
考官主要想考核Java基本功的掌握和应用。一方面,是servlet的生命周期;另一方面,则是其单例非线程安全对于安全这块的一个处理。
(2)核心答案讲解:
1)init()方法
在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet 时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入 Servlet。无论有多少客户机访问Servlet,都不会重复执行init();
2)service()方法
它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的 Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest) 对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存 在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
3)destroy()方法
仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的 delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因 此需要确认在调用destroy()方法时,这些线程已经终止或完成。
(3)问题扩展
如何解决servlet线程安全:
☛第一种,继承SingleThreadModel但是这样每次都会创建一个新的servlet实例, 但这样