Servlet的生命周期

Servlet的生命周期可以分为四步,即:
Servlet类加载—>实例化Servelet—>Servlet提供服务—>销毁Servelet

  1. Servlet类加载,该阶段只执行一次,Servlet容器在被第一次请求时执行,主要操作内容将Servlet类加载到内存。

  2. 实例化Servelet,该阶段只执行一次,Servelet容器创建ServletConfig对象,包括初始化Servlet的初始化配置,依次调用init(ServletConfig config)和init()方法
    注: 一般情况下,Servlet类加载和实例化Servlet这两个阶段在Servlet被第一次请求时有web容器执行,如果配置元素,情况就要另外讨论
    0:
    >=0代表web应用启动时就加载病实例化这个Servlet,当没有指定或为一个负数时,则表示容器在被访问时才加载和实例化

  3. Servlet提供服务,该阶段客户端请求一次执行一次,具体执行几次取决于客户端的请求次数。当Servlet接到请求时,该容器会正对这个请求创建ServletRequet和ServletResponse对象,前者封装请求,后者封装响应信息,然后调用service(ServletRequest req, ServletResponse res) ,然后调用service(HttpServletRequest req, HttpServletResponse resp),再执行doGet()或者doPost()方法
    实际上,无论是post还是get方式的请求,都会在service方法中处理,就不会处理doPost和doGet方法了,所以开发人员没必要重写service方法。

  4. 销毁Servlet,该阶段执行一次。

    测试代码如下:

依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

index.jsp代码

<html>
<body>
<h2>Hello World!</h2>
<a href="lifeservlet">lifeservlet</a>
</body>
</html>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>lifeServlet</servlet-name>
    <servlet-class>com.xiaolinzi.LiveServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>lifeServlet</servlet-name>
    <url-pattern>/lifeservlet</url-pattern>
  </servlet-mapping>
</web-app>

LiveServlet类:

package com.xiaolinzi;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class LiveServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost()...");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet()...");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service(HS,HS)...");
        super.service(req, resp);
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("service(S,S)...");
        super.service(req, res);
    }

    @Override
    public void init() throws ServletException {
        System.out.println("init()...");
    }

    @Override
    public void destroy() {
        System.out.println("destroy()...");
        super.destroy();
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init(ServletConfig)");
        super.init(config);
    }
}

运行结果:
在这里插入图片描述
销毁对象:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏尧木子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值