servelt的生命周期

1.Servlet在容器中运行,其实例的创建及销毁等都不是由程序猿决定的,而是由容器进行控制的创建Servlet有两个时机

1).客户端第一次请求某个Servlet时,系统创建该Servlet的实例:大部分的Servlet都是这种Servlet.

2).Web应用启动时立即创建Servlet实例,即Load-on-startup<load-on-startup>1</load-on-startup>Servlet的生命周期通过java.servlet.Servlet接口中的init()、service() 和destroy()方法来表示

每个Servlet的运行都遵守如下的生命周期

1>.加载和实例化:找到servlet类的位置通过类加载器加载Servlet类,成功加载后,容器通过JAVA的反射API来创建Servlet实例,调用的是Servlet的默认构造 方法(即无参构造)

2>.初始化:容器将调用Servlet的init()方法初始化这个对象.初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连 接,获取配置信息等。对于每个sevlet实例,init()方法智慧被调用一次

3>.请求处理:Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是在service()方法调用前,init()方法必须成功执行

4>.服务终止:容器就会调用实例的destroy()方法,以便让该实例可以释放它所有的资源

2.从始至终只有一个对象,多线程通过线程池访问同一个servlet

Servlet采用多线程来处理多个请求同时访问,Servlet容器维护了一个线程池来服务请求

线程池实际上是等待执行代码的一组线程叫做工作者线程(WorkerThread),Servlet容器使用一个调度线程来管理工作者线程(DispatcherThread)。

当容器收到一个访问Servlet请求,调度者线程从线程池中选出一个工作者线程,将请求传递给该线程,然后由该线程来执行Servlet的service方法

当这个线程正在执行的时候,容器收到另一个请求,调度者线程将从线程池中选出另一个工作者线程来服务新的请求,容器并不关系这个请求是否访问的是同一个Servlet还是 另外一个Servlet.

当容器同时收到对同一个Servlet的多个请求,那这个Servlet的service方法将在多线程中并发执行

3.如何实现Servlet的单线程模式

<%@ page isThreadSafe="false"%>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值