第四章 servlet生命周期理论解析(一)

Servlet生命周期

要点和思维图解
  • 生命周期5个生命节点

  • Servlet接口继承关系和api使用

  • servlet的xml和注解配置

  • ServletConfig对象

  • servlet的生命周期由servlet容器来管理,该生命周期规定了 Servlet 如何被加载、实例化、初始化、
    处理客户端请求,以及何时结束服务。下图展示了Servlet的生命周期的基本过程。

在这里插入图片描述

3.1 加载

由servlet容器对Servlet类的字节码进行加载。(这属于Java基础,设计到虚拟机如何加载类文件,不过多介绍。)

3.2 实例化

由servlet容器对Servlet进行实例化。将会调用Servlet类的无参构造器,所以servlet一定要有一个默认的无参构造器,否则会抛出异常。(这个操作时servlet容器来实现,在后面介绍tomcat容器的时候详细介绍。)

3.3 初始化
  • 实例化完成后会默认调用Servlet的init(ServletConfig config)方法
public void init(ServletConfig config) throws ServletException;
3.3 处理客户请求阶段

当servlet的实例被创建之后,servlet容器会把相应的请求转到servlet实例的service方法中来。

 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
3.3.1 Servlet多线程问题

这里有一个面试经常会被问到的问题,就是servlet是不是线程安全的。转换过来意思就是当用户请求的时候是不是一个请求就是一个实例呢,还是所有的请求都是一个实例?
默认情况下,servlet容器对servlet在一个线程上实现单实例模式,因此servlet在容器中默认不是线程安全的。
但是如果servlet实现了SingleThreadModel接口,那么servlet容器会对该servlet实例实行多实例化。当然也不是每个请求都有是一个实例而是由serve容器确定的。但是这种写法不推荐使用,因为会严重影响容器的响应性能。而且,这个借口已经定义成为了一个过时的接口后续的版本可能会不支持的。

3.4 结束服务

当需确定从服务中移除servlet时,servlet容器会自动调用destroy方法。 一般就是在我们正常停止服务器时,会触发容器的该操作。

public void destroy();
Servlet接口源码
package javax.servlet;
import java.io.IOException;
public interface Servlet {
    public void init(ServletConfig config) throws ServletException;

    public ServletConfig getServletConfig();    

    public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
	
    public String getServletInfo();
    
    public void destroy();
}

这里还有getServletConfig和getServletInfo方法没介绍。

那我们先来说说getServletInfo这个简单的方法,看源码接口的注释。说该方法是返回一个关于当前servlet的作者,版本,版权等信息的字符串。也就是说在具体的功能中是没有什么作用的。就是提供一些servlet的信息而已。

getServletConfig方法会返回一个ServletConfig对象,看名称我们也清楚它肯定是一个servlet的配置对象。而且是在容器调用init(ServletConfig config)方式时候传进来的。那么它的作用肯定还是蛮大的,下一届我们通过具体的案例来看啊可能servlet接口的架构和ServletConfig参数的具体作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值