Servlet 生命周期和工作原理

Servlet 生命周期和工作原理

Servlet 生命周期

  1. 加载阶段:当 Web 应用程序第一次收到一个请求时,Servlet 容器会检查 Servlet 类是否已经加载,如果没有加载,Servlet 容器会把 Servlet 类加载到内存中。如果 Servlet 类实现了 javax.servlet.Servlet 接口,Servlet 容器会创建一个 Servlet 实例,但不会调用其任何方法。
  2. 初始化阶段:在 Servlet 实例创建后,Servlet 容器会调用其 init() 方法进行初始化。开发人员可以在 init() 方法中初始化 Servlet 的一些资源,比如数据库连接、日志对象等。
  3. 请求处理阶段:当 Web 应用程序接收到一个请求时,Servlet 容器会检查请求是否已经匹配到一个 Servlet,如果匹配成功,Servlet 容器会创建一个新的线程并调用 Servlet 的 service() 方法。在 service() 方法中,Servlet 可以根据请求类型调用不同的方法,如 doGet()doPost()doPut()doDelete() 等,来处理请求并生成响应。
  4. 销毁阶段:当 Servlet 容器关闭时,或者 Web 应用程序被卸载时,Servlet 容器会调用 Servlet 的 destroy() 方法进行清理工作。在 destroy() 方法中,开发人员可以释放 Servlet 初始化时创建的资源,如关闭数据库连接、关闭日志对象等。

Servlet 的工作原理

  1. 客户端向 Web 服务器发送一个 HTTP 请求。
  2. Web 服务器接收到请求,并根据请求的 URL 匹配到相应的 Servlet。
  3. Servlet 容器根据 Servlet 的生命周期创建 Servlet 实例,并调用其 init() 方法进行初始化。
  4. Servlet 容器创建一个 HttpServletRequest 对象,用于封装客户端发送的请求信息,并将该对象传递给 Servlet 的 service() 方法。
  5. Servlet 根据请求的方法类型(GET、POST 等)调用相应的方法(doGet()doPost() 等)处理请求,并生成相应的响应数据。
  6. Servlet 容器创建一个 HttpServletResponse 对象,用于封装响应数据,并将该对象传递给 Servlet 的 service() 方法。
  7. Servlet 将生成的响应数据写入 HttpServletResponse 对象中。
  8. Servlet 容器将 HttpServletResponse 对象中的响应数据发送给 Web 服务器。
  9. Web 服务器将响应数据发送给客户端。

在整个过程中,Servlet 容器负责创建和销毁 Servlet 实例,调用 Servlet 方法,封装请求和响应数据等工作,而开发人员则需要实现 Servlet 的具体业务逻辑,如请求处理、数据读写等。