Servlet 生命周期

简介: Servlet 生命周期

主要有三个方法

1. init()初始化阶段

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

3. destroy()终止阶段

● 示意图

● 初始化阶段

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)
  2. 当浏览器每次请求 Servlet 时,就会调用一次 service
  3. 当 tomcat 调用该方法时,会把 http 请求的数据封装成实现 ServletRequest 接口的 request 对象
  4. 通过 servletRequest 对象,可以得到用户提交的数据
  5. 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() 被调用..");
        }


目录
相关文章
Servlet生命周期
Servlet生命周期
71 1
|
Java 数据库连接 容器
Servlet的生命周期
Servlet的生命周期
|
Java 数据库连接 容器
8:Servlet生命周期-Java Web
8:Servlet生命周期-Java Web
146 0
|
Java 应用服务中间件 数据库连接
探索研究Servlet 生命周期
【9月更文挑战第22天】
145 7
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
Java 应用服务中间件 数据库连接
Servlet生命周期
Servlet生命周期
122 0
|
前端开发 应用服务中间件
servlet执行流程&生命周期
servlet执行流程&生命周期
servlet生命周期面试题
servlet生命周期面试题
|
存储 Java 应用服务中间件
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(2)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
140 2