第一个servlet和servlet的生命周期

1.导入依赖

首先,我们需要在pom.xml中配置所需要的jar包:在maven官网中去下载:直接在浏览器中搜索maven仓库

然后搜索需要的jar包:

Servlet程序需要的jar包为:servlet-api

选择所需要的版本:

然后复制依赖:

将依赖粘贴到pom文件中:

 <dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

在src/main下写.java文件。

2.书写servlet(实现Servlet接口)

package com.dh.servlet;

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

public class Servlet01 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 {

    }

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

    @Override
    public void destroy() {

    }
}

3.书写web.xml配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <servlet>
<!--    名字随便取-->
    <servlet-name>servlet01</servlet-name>
<!--    类的全称限定名-->
    <servlet-class>com.dh.servlet.Servlet01</servlet-class>
  </servlet>

  <!--    servlet映射-->
  <servlet-mapping>
<!--    与上述的名字必须一致-->
    <servlet-name>servlet01</servlet-name>
<!--    路径,以/开头,是一个虚拟路径,可以写多个,但是不能重复-->
    <url-pattern>/servlet01</url-pattern>
  </servlet-mapping>
</web-app>

即将自己写的servlet类与访问路径绑定起来。

此时访问一下该路径:

空白是因为此时还没有在方法中书写内容。

4.Servlet接口中的方法

Servlet接口中的方法共有五个:

public void init(ServletConfig servletConfig);//初始化方法,初始化servlet对象 
public void service(ServletRequest servletRequest, ServletResponse servletResponse);//提供服务的方法,主要的代码都是在service中书写 
public void destroy();//销毁servlet方法
public ServletConfig getServletConfig();//获取servletConfig对象
public String getServletInfo();//获取servlet信息

方法中书写内容:

 @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init......");
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service.......");
    }

    @Override
    public void destroy() {
        System.out.println("destroy......");
    }

然后启动服务器:

在浏览器中输入http://localhost:8080/servlet_01_javaweb/servlet01,控制台上输出了:

init......
service.......

三次刷新浏览器:

init......
service.......
service.......
service.......
service.......

关闭服务器:

//一堆信息
destroy......
//一堆信息

所以,可以得出结论:在浏览器发送请求时,会执行init()初始化servlet对象,然后执行service(),然后每次请求都会执行一次service(),关闭服务器会执行destroy()。

即:

init()和destroy()只执行一次,分别在初始化servlet对象和销毁servlet对象时执行;

service()方法可能执行多次,每次刷新浏览器,即发送请求时,都会执行service()。

5.提前init()的执行

在默认情况下,init()是在发送请求时才会执行,但是我们可以设置其在服务器启动的时候就执行:

<servlet>
    <servlet-name>servlet01</servlet-name>
    <servlet-class>com.dh.servlet.Servlet01</servlet-class>
    <!--      将init()提前到启动服务器时执行-->
    <!--      数字为0,1,2...都可,越小级别越高-->
    <load-on-startup>0</load-on-startup>
</servlet>

6.servlet的生命周期

  1. 在浏览器中输入URL;

  2. web容器截取URL中的URI;

  3. web容器在容器上下文中查找URI对应的servlet对象:

    若没有找到,则通过web.xml获得servlet的完整类名,然后通过反射实例化servlet对象,调用init()进行初始化,然后调用service()提供服务;

    若找到了,则直接使用servlet对象调用service()提供服务。

  4. 当web容器关闭,项目重新部署,或者长时间未访问该servlet时,servlet对象就会调用destroy()。

posted @ 2021-03-10 18:35  deng-hui  阅读(90)  评论(0编辑  收藏  举报