Servlet是在服务器端运行的Java程序,可以接收客户端请求并且做出响应。
Servlet的生命周期:
1.实例化,Servlet容器创建Servlet实例
2.初始化,该容器调用init(ServletConfig())方法
3.服务,如果请求Servlet,则容器调用service()方法
4.销毁,销毁实例之前调用destory()方法
Servlet是线程不安全的:
容器在项目创建时创建,一个项目只有一个容器,在项目重启或者关闭时销毁。每构建一个Servlet只会有唯一一个对象(单例)即容器是单例的,ServletContent里放的是servlet对象。
项目启动时,tomcat提供了所有的对象,且都是单例的。
默认情况下,Servlet容器对每个Servlet只实例化一次。Servlet容器维护一个线程池服务请求,当容器收到一个访问Servlet的请求时,就会从线程池中选一个线程,把请求传递给这个线程,由这个线程调度Servlet的方法。
所以在默认情况下,Servlet是多线程的,一个Servlet实例同时在多个线程中执行,并发地处理多个客户端请求。因为Servlet是多线程的,所以开发Servlet时必须注意线程安全。Servlet线程的安全有两个问题,一个是变量的线程安全,局部变量总是线程安全的,实例变量和类变量不是线程安全的。另一个是属性的线程安全,请求对象的属性访问是线程安全的,而session对象和上下文的属性访问不是线程安全的