servlet是由web服务器调用,web服务器在收到浏览器请求后,会判断servlet是否存在,若不存在则装载创建servlet的实例并初始化(若存在则跳过此步骤),然后调用service方法对请求进行处理。

一、UML

Servlet原理
从图中,可以看出:

1.抽象类HttpServlet继承抽象类GenericServlet,其有两个比较关键的方法,doGet()和doPost()

2.GenericServlet实现接口Servlet,ServletConfig,Serializable

3.HelloServlet(用户自定义Servlet类)继承HttpServlet,重写抽象类HttpServlet的doGet()和doPost()方法

注:任何一个用户自定义Servlet,只需重写抽象类HttpServlet的doPost()和doGet()即可,如上图的HelloServlet

二、Servlet在容器中的执行过程

Servlet在容器中的执行过程
Servlet原理
流程:

  1. 浏览器向服务器发出GET/Post请求。

  2. 服务器上的容器逻辑接收到该url,根据该url判断为Servlet请求,此时容器逻辑将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)

  3. 容器逻辑根据url找到目标Servlet,且创建一个线程A。

  4. 容器逻辑将刚才创建的请求对象和响应对象传递给线程A。

  5. 容器逻辑调用Servlet的service()方法。

  6. service()方法根据请求类型调用doGet()或doPost()方法。

  7. doGet()或doPost()执行完后,将结果返回给容器逻辑。

  8. 线程A被销毁或被放在线程池中。

三、Servlet在容器中的生命周期

  1. 加载和实例化
    当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet对象(实例)。
  2. 初始化
    在Servlet实例化之后,容器将调用Servlet的init()初始化这个对象。
  3. 处理请求
    Servlet容器调用Servlet的service()方法对请求进行处理。
  4. 终止服务
    当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy(),以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

相关文章: