Servlet 生命周期

文章目录

  • Servlet 生命周期
    • 主要有三个方法
    • ● 示意图
    • ● 初始化阶段
    • ● 处理浏览器请求阶段(service 方法)
    • ● 终止阶段 destory 方法(体现 Servlet 完整的生命周期)
    • ● 代码演示

Servlet 生命周期

主要有三个方法

​ 1. init()初始化阶段

​ 2. service()处理浏览器请求阶段

​ 3. destroy()终止阶段

● 示意图

Servlet 生命周期_第1张图片

● 初始化阶段

Servlet 容器(比如: Tomcat)加载 Servlet,加载完成后,Servlet 容器会创建一个 Servlet 实例并调用 init()方法,init()方法只会调用一次, Servlet 容器在下面的情况装载 Servlet

​ 1. Servlet 容器(Tomcat)启动时自动装载某些 servlet,实现这个需要在 web.xml 文件中添加 1 1 表示装载的顺序

​ 2. 在 Servlet 容器启动后,浏览器首次向 Servlet 发送请求(这个前面说过)

​ 3. Servlet 重新装载时(比如 tomcat 进行 redeploy【redeploy 会销毁所有的 Servlet 实例】), 浏览器再向 Servlet 发送请求的第 1 次

● 处理浏览器请求阶段(service 方法)

  1. 每收到一个 http 请求,服务器就会产生一个新的线程去处理[线程]

  2. 创建一个用于封装 HTTP 请求消息的 ServletRequest 对象和一个代表 HTTP 响应消息的 ServletResponse 对象

  3. 然后调用 Servlet 的 service()方法并将请求和响应对象作为参数传递进去

● 终止阶段 destory 方法(体现 Servlet 完整的生命周期)

当web 应用被终止,或者Servlet 容器终止运行,或者Servlet 类重新装载时,会调用 destroy() 方法, 比如重启 tomcat ,或者 redeploy web 应用

● 代码演示

开发 Servlet, 通常编写 doGet、doPost 方法。来对表单的 get 和 post 请求进行分发处理

HTML部分

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>注册title>
head>

<body>
    <h1>注册用户h1>
    <form action="http://localhost:10000/do_servlet/ok" method="post">
        u: <input type="text" name="username" /><br><br>
        <input type="submit" value="注册用户" />
    form>
body>

html>
    1. service 方法处理浏览器的请求(包括 get/post)
    1. 当浏览器每次请求 Servlet 时,就会调用一次 service
    1. 当 tomcat 调用该方法时,会把 http 请求的数据封装成实现 ServletRequest 接口的 request 对象
    1. 通过 servletRequest 对象,可以得到用户提交的数据
    1. servletResponse 对象可以用于返回数据给 tomcat->浏览器

Servlet.java部分

/**
 * 1. service 方法处理浏览器的请求(包括 get/post)
 * 2. 当浏览器每次请求 Servlet 时,就会调用一次 service
 * 3. 当 tomcat 调用该方法时,会把 http 请求的数据封装成实现 ServletRequest 接口的 request 对象
 * 4. 通过 servletRequest 对象,可以得到用户提交的数据
 * 5. servletResponse 对象可以用于返回数据给 tomcat->浏览器
 *
 * @param servletRequest
 * @param servletResponse
 * @throws ServletException
 * @throws IOException
 */
@Override
public void service(ServletRequest servletRequest,ServletResponse servletResponse)throws ServletException,
        IOException{
        count++;
        // 如果 count 的值,在不停的累计,说明 HelloServlet 是单例的
        System.out.println("hi HelloServlet~ count= "+count);
        // Tomcat 每处理一次 http 请求,就生成一个新的线程
        System.out.println("当前线程 id= "+Thread.currentThread().getId());
        // 1. ServletRequest 没有得到提交方式的方法
        // 2. ServletRequest 看看 ServletRequest 子接口有没有相关方法
        // 3. 小技巧:ctrl+alt+b => 可以看到接口的子接口和实现子类
        // 4. 把 servletReqeust 转成 HttpServletRequest 引用
        // 5. 仍然是 Java 基础的 OOP
        HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
        String method=httpServletRequest.getMethod();
        if("GET".equals(method)){
        doGet(); // 用 doGet() 处理 GET 请求
        }else if("POST".equals(method)){
        doPost(); // 用 doPost() 处理 POST 请求
        }
        }
        /**
        * 用于响应 get 请求的
         */
public void doGet(){
        System.out.println("doGet() 被调用..");
        }
        /**
        * 用于响应 post 请求的
         */
public void doPost(){
        System.out.println("doPost() 被调用..");
        }

你可能感兴趣的:(javaWEB,servlet)