(1)init()方法:
在Servlet生命周期中,仅执行一次init()方法,他是在服务器装入Servlet时执行的,可以配置服务器,以在服务器或客户端首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,init()方法都只会执行一次(单例)。
(2)service()方法:
它是Servlet.的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”( ServletReguest)对象和一个“响应”(ServletResponse) 对象作为参数。在HttpServlet.中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
(3)destory()方法:
仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
(4)如何解决servlet线程安全:
第一种:继承SingleThreadModel但是这样每次都会创建一个新的servlet实例,但这样消耗服务器的内存,降低了性能,并且这个接口现在已经过时了,不推荐使用。
第二种:我们尽量避免使用全局变量。(推荐使用)
第三种:我们可以通过使用ThreadLocal,内部结构是一个Map结构,用当前线程作为key,他会创建多个副本。get, set方法
第四种:我们当然还可以来加锁,进行解决线程问题。而且我还知道,向我们这种常用的MVC框架,strutsl, springMVC 这些MVC框架,都是基于serylet. 发展而来的,就比如strutsl的核心总控制器是ActionServlet,而springVVC的前端总控制器是dispatchServleth在项目中我们曾经用servlet来生成图片验证码的,防止用户进行暴力破解。
07778064