Servlet生命周期

servlet的生命周期即从Servlet出现到消亡(销毁)的全过程

加载类——>实例化(为对象分配空间)——>初始化(为对象的属性赋值)——>请求响应(服务阶段)——>销毁

 

生命周期:

1.加载和实例化

默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

2.初始化

在Servlet实例化之后,容器将调用Servlet的int()方法初始化这个对象,完成一些如加载配置文件,创建连接等初始化的工作。该方法只调用一次

3.请求处理

每次请求Servlet时,Servlet容器都会调用Servlet()方法对请求进行处理

4.服务终止

当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destory()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

@WebServlet(urlPatterns="/demo",loadOnStartup=1)

  1. 负整数:第一次被访问时创建Servlet对象
  2. 0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

方法介绍

  • 初始化方法,在Servlet被创建时执行,只执行一次

void init(ServletConfig config)

  • 提高服务方法,每次Servlet被访问,都会调用该方法

void service(ServletRequest req,ServletResponse res)

  • 销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

void destroy()

  • 获取ServletConfig对象

ServletConfig getServletConfig()

  • 获取Servlet信息

String getServletlnfo()

生命周期的三个方法

  1. init()初始化阶段
  2. service()处理客户端请求阶段
  3. destory()终止阶段
  4. 容器(Tomcat)装载Servlet

实例化阶段

  1. 当客户端首次发送第一次请求后,由Servlet容器去解析请求,根据请求找到是否有对应的Servlet
  2. 判断是否有Servlet实现类的对象存在?存在则直接使用,不存在则先创建一个Servlet实现类的对象

初始化阶段

Servlet初始化是其生命周期的第一个阶段,也是其他阶段的基础,只有完成了初始化,Servlet才能处理来自客户端的请求。

  1. 加载和实例化Servlet
  2. 调用init()方法进行初始化

1.加载实例化

Servlet容器负责加载和实例化Servlet

当容器启动或者首次请求某个Servlet时,容器会读取web.xml或@WebServlet中的配置信息,对指定的Servlet进行加载。加载成功后,容器会通过反射对Servlet进行实例化

2.调用init()方法进行初始化

加载和实例化完成后,Servlet容器会创建一个Servlet对象并调用Servlet的init方法(在Servlet生命周期内只能调用一次init方法)去初始化Servlet实例

请求响应阶段

初始化完成后调取service()方法,由service()判断客户端的请求方式

  1. 如果是get请求,则执行doGet()方法
  2. 如果是post请求,则执行doPost()方法
  3. 处理方法完成后会作出相应的结果返回给客户端,单词请求处理完毕
  4. 当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init(),而直接执行service方法进行销毁,宣告生命周期的结束

服务终止阶段

当服务器关闭,重启或移除 Servlet 实例时Servlet调取destroy()方法进行销毁,宣告生命周期的结束。

public class EmpServlet extends HttpServlet{

    //初始化servlet,调用init方法

  

    public void init() throws ServletException {

        System.out.println("初始化时调用");

    }

    //开启服务

  

    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

        System.out.println("开启服务时调用");

    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        

    }

    //销毁时调用destory

    public void destroy() {

        System.out.println("销毁时调用");

    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值