Servlet生命周期

举报
兰舟千帆 发表于 2022/07/21 19:13:10 2022/07/21
【摘要】 Servlet生命周期在Java中对象的生命周期指一个对象从被创建到被销毁的整个过程。我们可以将Servlet大致划分为四个阶段1:加载和实例化,我们的默认情况下,没有自己指定值的话,Servlet在被第一次被访问的时候,会由容器创建Servlet对象。默认情况,Servlet会在第一次访问被容器创建,但是如果创建Servlet比较耗时的话,那么第一个访问的人等待的时间就比较长,用户的体验...

Servlet生命周期

在Java中对象的生命周期指一个对象从被创建到被销毁的整个过程。
我们可以将Servlet大致划分为四个阶段

1:加载和实例化,我们的默认情况下,没有自己指定值的话,Servlet在被第一次被访问的时候,会由容器创建Servlet对象。

默认情况,Servlet会在第一次访问被容器创建,但是如果创建Servlet比较耗时的话,那么第一个访问的人等待的时间就比较长,用户的体验就比较差,那么我们能不能把Servlet的创建放到服务器启动的时候来创建,具体如何来配置?
@WebServlet(urlPatterns = “/demo1”,loadOnStartup = 1)
loadOnstartup的取值有两类情况
(1)负整数:第一次访问时创建Servlet对象
(2)0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

2:初始化,继加载和实例化之后然后Servlet的init()方法会实现初始化对象。初始化完成的工作就是加载配置文件,创建连接等初始化工作。初始化的方法只会执行一次。
3:请求处理,每次请求Servlet都会自动调用service请求进行处理。
4:服务终止,当需要释放内存或者容器关闭时,容器就会调用Servlet实例的==destroy()==方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

测试用例

package jgd;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet(urlPatterns = "/demo2", loadOnStartup = 1)
public class ServletDemo02 implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {
//       初始化方法
//        1:调用时机:默认情况下Servlet被第一次访问的时候调用
//        2:调用次数:只会被调用一次
        System.out.println("init");
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //每次Servlet被访问的时候service会自动执行
        System.out.println("servlet hello world");
    }

    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 2:调用次数:1次
     * 1:调用时机:内存或者服务器关闭的时候,Servlet对象会被销毁
     */
    public void destroy() {
        System.out.println("destory---");

    }
}

Servlet方法说明和体系结构

方法说明

在上文中已经说明了三个方法。初始化,服务,以及销毁。
1:初始化方法,只执行一次,默认在Servlet被第一次访问执行。

init(ServletConfig servletConfig)

2:服务方法,每次Servlet被访问的时候会默认访问,主要用于编写处理的访问逻辑.

void service(ServletRequest servletRequest, ServletResponse servletResponse)

3:销毁方法,Servlet被销毁的时候,该方法被调用。在内存释放或者服务器关闭的时候销毁Servlet。需要进行正常的关闭,如果关掉java进程就来不及等到对象被销毁。

destroy()

4:获取Servlet信息,一般的话不怎么用,给它返回空字符串和空就可以

String getServletInfo()

5:获取ServletConfig对象

ServletConfig getServletConfig()

我们研究一下如何获取到这个对象,我们可以这样做。主要是扩大作用范围。看看就明白了。

package jgd;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/*
Servlet方法说明演示
 */

@WebServlet(urlPatterns = "/demo3", loadOnStartup = 1)
public class ServletDemo02 implements Servlet {
    private ServletConfig servletConfig;
    public void init(ServletConfig servletConfig) throws ServletException {
//       初始化方法
//        1:调用时机:默认情况下Servlet被第一次访问的时候调用
//        2:调用次数:只会被调用一次
        System.out.println("init");
        //将servletConfig值赋给了局部变量
        this.servletConfig=servletConfig;
    }

    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //每次Servlet被访问的时候service会自动执行
        System.out.println("servlet hello world");
    }

    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 2:调用次数:1次
     * 1:调用时机:内存或者服务器关闭的时候,Servlet对象会被销毁
     */
    public void destroy() {
        System.out.println("destory---");

    }
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。