Servlet的生命周期与工作原理

本文深入探讨了Servlet的三个关键生命周期阶段:初始化、响应客户请求及终止阶段。阐述了Servlet容器如何在不同时刻装载Servlet,以及Servlet如何通过init()、service()和destroy()方法完成初始化、响应请求和资源释放的任务。同时,介绍了Servlet接收和响应客户请求的过程,以及如何通过自定义Servlet来实现业务逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet生命周期分为三个阶段:
  1,初始化阶段                 调用 init()方法
  2,响应客户请求阶段    调用 service()方法
  3,终止阶段                调用 destroy()方法
Servlet初始化阶段:
  在下列时刻Servlet容器装载Servlet:
    1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:
<loadon-startup>1</loadon-startup>
    2,在Servlet容器启动后,客户首次向Servlet发送请求
    3,Servlet类文件被更新后,重新装载Servlet
  Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

Servlet工作原理:
  首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对 请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的, HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都 必须实现doGet或doPost等这些方法
  每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候 只需要继承HttpServlet即可。
  Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。

Servlet响应请求阶段:
  对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
  对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:
private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();
  这是一个String-->String[]的键值映射。
  HashMap线程不安全的,Hashtable线程安全。
Servlet终止阶段:
  当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值