【Servlet】Servlet的生命周期

Servlet的生命周期就是servlet对象从创建到销毁的全过程。具体分为以下两种情况:

一般情况下其生命周期从第一次收到请求开始,到服务器关闭结束

例:用eclipse新建一个Web2.5项目“nimei”,在该项目中新建一个包“com.jpc.one”,在其中新建一个servlet文件“TestServlet.java”:

package com.jpc.one;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	 //构造方法方法只执行一次,默认情况下第一-次请求该Servlet时执行;<load- on-startup>1</load-on-startup>则随项目发布而执行
    public TestServlet() {
        System.out.println("创建TestServlet对象");
    }
    
    //init方法只执行一次,默认情况下第一-次请求该Servlet时执行;<load- on-startup>1</load-on-startup>则随项目发布而执行
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("初始化TestServlet对象");
		super.init(config);
	}
    //servlet中如果写了service方法,则一定会执行该方法,如果调用了父类的service方法,则判断是post还是get请求,区分执行doPost还是doGet方法
    @Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    	System.out.println("接收请求一定执行service");
		super.service(arg0, arg1);
	}
	
	//处理get请求
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("接收请求选择执行doGet");
	}

	//处理post请求
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("接收请求选择执行doPost");
	}

	//服务器关闭时销毁该servlet之前执行该方法
	@Override
	public void destroy() {
		System.out.println("销毁TestServlet对象");
	}
}

将该servlet文件添加进tomcat服务器,然后启动服务,我们看到启动服务后tomcat根目录下webapps文件夹下的“nimei”文件夹中立刻出现了class文件,但是左边eclipse的控制台并没有打印任何内容,此时仅仅是tomcat将DataServlet文件进行了编译然后放在了其工作目录中等待浏览器客户端的请求:
在这里插入图片描述
在这里插入图片描述
这时在浏览器地址栏输入“127.0.0.1/nimei/TestServlet”然后回车,我们看到eclipse控制台依次打印出了也打印出了如下内容,此时该servlet的生命周期正式开启!
在这里插入图片描述
此后再次请求该servlet,eclipse控制台只会打印出service和doGet方法的输出语句,因为其创建对象(执行构造方法)以及初始化(执行init方法)已经在第一次请求时完成!
在这里插入图片描述

  • 这时如果将tomcat工作目录下的“TestServlet.class”文件删除,再次请求该servlet,浏览器将出现“500”错误提示,并且eclipse控制台也会出现“ClassNotFoundException”的异常提示
  • 此时如果将“TestServlet.class”做一下修改(哪怕加个空格都行),再次保存,重启tomcat,会将该文件再次编译,将class文件放进其工作目录中,再次请求该servlet就会重新得到响应(执行构造方法–>执行init方法–>执行service–>执行doPost/doGet方法)

当我们将tomcat服务关闭,将在eclipse控制台打印“销毁TestServlet对象”,此时该servlet的生命周期正式结束!
在这里插入图片描述

如果在web.xml 中配置了load-on-startup则该servlet的生命周期是从服务器开启到服务器关闭

<load-on-startup>标签中的数字的意义是加载的顺序,因为一个Web项目中通常不只有一个servlet文件,因此用该标签来控制每个servlet文件的加载顺序:

<servlet>
  <servlet-name>TestServlet</servlet-name>
  <servlet-class>com.jpc.one.TestServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

此时一经开启服务,在eclipse控制台就会打印如下内容,此时该servlet的生命周期正式开启!
在这里插入图片描述
当发送第一次请求给该servlet时,在eclipse控制台就会打印如下内容:
在这里插入图片描述
将tomcat服务关闭,将在eclipse控制台打印“销毁TestServlet对象”,此时该servlet的生命周期正式结束!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值