Servlet生命周期

生命周期通过Servlet方法来体现
创建:执行init方法,只执行一次。所以只会被创建一次 

Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。

Servlet什么时候被创建  

  

  • init方法是用来加载资源的
  • 如果加载的资源比较多,有的Servlet执行前需要依赖其他的Servlet,这种的就要在服务器启动时就创建。


  多用户同时访问,可能纯在多线程安全问题
  解决:尽量不要在Servlet中定义成员变量,定义局部变量。即使定义了成员变量,也不要对其修改(不要有并发的操作)。
  在一个对象里方法不被共享,成员变量可以共享

提供服务:执行service方法,访问Servlet一次,执行一次。


被销毁:Servlet被销毁时,执行destro方法,执行一次。在Servlet销毁前执行,用于释放资源(可以理解为交代临终遗言)

服务器正常关闭才执行
不正常关闭不会被执行(服务器突然断电,程序被直接关闭,不会被执行)

ServletConfig:代表当前Servlet在web.xml中的配置信息(用的不多)

String getServletName()  -- 获取当前Servlet在web.xml中配置的名字
String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
Enumeration getInitParameterNames()  -- 获取当前Servlet所有初始化参数的名字组成的枚举
ServletContext getServletContext()  -- 获取代表当前web应用的ServletContext对象

getServletInfo它提供有关servlet 的信息,如作者、版本、版权。

package cn.itcast.web.servlet;

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

/**
 * @author 旗木五五开
 * @create 2020-02-16 13:26
 * 如何只定义1个service方法,其它的方法按需求设置
 */
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet{
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

//    大多数就用这一个方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("demo1...");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

 

posted @ 2020-02-18 14:44  风萧萧路漫漫  阅读(165)  评论(0编辑  收藏  举报
// 改变博客标题
浏览器标题切换
浏览器标题切换end