servlet生命周期方法

servlet生命周期方法

java代码

package bai.servlet;


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

public class ServletDemo03 implements Servlet {
    /**
     * 初始化方法
     * 在Servlet创建时 执行 只会执行一次
     * @param servletConfig
     * @throws ServletException
     */
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init.....");
    }

    /**
     * 获取ServletConfig对象
     * ServletConfig:Servlet的配置对象
     * @return
     */
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务的方法
     * 每一次Servlet被访问时 执行 执行多次
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service.....");
    }

    /**
     * 获取Servlet的一些信息 版本 作者等等..
     * @return
     */
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 在服务器正常关闭时 执行 执行一次
     */
    public void destroy() {
        System.out.println("destroy.....");
    }
}

运行这三个的方法

 

 1.被创建:执行init方法 只执行一次

  • servlet默认情况下 第一次被访问时 Servlet被创建
  • 可以在配置执行Servlet的创建时机
    • 在<Servlet>标签下配置

xml第一种代码

<servlet>
        <servlet-name>demo3</servlet-name>
        <servlet-class>bai.servlet.ServletDemo03</servlet-class>

        <!--指定Servlet的创建时机
            第一次被访问时 创建
            <load-on-startup>的值为负数 
        -->
        <load-on-startup>-5</load-on-startup>
    </servlet>
    <!--映射demo1的配置-->
    <servlet-mapping>
        <servlet-name>demo3</servlet-name>
        <url-pattern>/demo3</url-pattern>
    </servlet-mapping>

运行结果

 

 xml第二种方式代码

 <servlet>
        <servlet-name>demo3</servlet-name>
        <servlet-class>bai.servlet.ServletDemo03</servlet-class>

        <!--指定Servlet的创建时机
            在服务器启动时 创建
            <load-on-startup>的值为0或正整数
        -->
        <load-on-startup>5</load-on-startup>
    </servlet>
    <!--映射demo1的配置-->
    <servlet-mapping>
        <servlet-name>demo3</servlet-name>
        <url-pattern>/demo3</url-pattern>
    </servlet-mapping>

运行结果

 

 

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

  • 多个用户同时访问 可能存在线程安全问题
  • 解决:尽量不要在Servlet中定义成员变量 即使定义了成员变量 也不要对修改值

 

2.提供服务:执行Service方法 执行多次

  • 每次访问Serclet时 Serclce方法都会被调用一次

3.被销毁:执行destroy方法 只执行一次

  • Servlet被销毁时执行 服务器关闭时 Servlet被销毁
  • 只有服务器正常关闭时 才会执行destroy方法
  • destroy方法在Servlet被销毁之前执行 一般用于释放资源
posted @ 2022-08-08 17:28  baimingze  阅读(60)  评论(0)    收藏  举报