servlet学习(二):servlet的生命周期

2019-02-25  本文已影响3人  程序员三千_

    Servlet 生命周期指的是,Servlet 对象的创建、Servlet 对象的初始化、Servlet 对象服

务的执行,及最终 Servlet 对象被销毁的整个过程。

servlet生命周期图:

    Servlet 的整个生命周期过程的执行,均由 Web 服务器(我们这里的是tomcat)负责管理,程序员无法控制其

执行流程。但程序员可以获取到 Servlet 的生命周期时间点,并可以指定让 Servlet 做一些业务相关的事情。

示例代码:

package com.wdy;

import javax.servlet.*;

import java.io.IOException;

public class LifeServletimplements Servlet {

public LifeServlet(){

System.out.println("无参构造方法执行");

    }

@Override

    public void init(ServletConfig servletConfig)throws ServletException {

System.out.println("init");

    }

@Override

    public ServletConfiggetServletConfig() {

return null;

    }

@Override

    public void service(ServletRequest servletRequest, ServletResponse servletResponse)throws ServletException, IOException {

System.out.println("service");

    }

@Override

    public StringgetServletInfo() {

return null;

    }

@Override

    public void destroy() {

System.out.println("destroy");

    }

}

并在web.xml里配置这个servlet:

1.我们启动tomcat服务 :没有打印任何日志

 2.我们执行life这个url请求:

3.手动关闭tomcat:

4.刷新一下浏览器:

servlet的特征

1、Servlet是单实例(不管是刷新浏览器多少次,只调用一次init方法)、多线程(每刷新一次浏览器就执行一次service方法)的,只创建一个servlet对象,但是每次请求都会起一个线程并在自己线程栈内存中执行service方法。

2、一个 Servlet 实例只会执行一次无参构造器与 init()方法,并且是在第一次访问时执行。

3、用户每提交一次对当前 Servlet 的请求,就会执行一次 service()方法。

4、一个 Servlet 实例只会执行一次 destroy()方法,在应用停止时执行。

5、由于 Servlet 是单例多线程的,所以为了保证其线程安全性,一般情况下是不建议在 Servlet类中定义可修改的成员变量,因为每个线程均可修改这个成员变量,会出现线程安全问题。

6、默认情况下,Servlet 在 Web 容器(tomcat)时是不会被实例化的。

上一篇下一篇

猜你喜欢

热点阅读