前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet生命周期

Servlet生命周期

作者头像
星哥玩云
发布2022-09-14 20:53:33
1780
发布2022-09-14 20:53:33
举报
文章被收录于专栏:开源部署开源部署

一、生命周期概述

所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期相关的方法有:

​ void init(ServletConfig);

​ void service(ServletRequest,ServletResponse);

​ void destroy();

二、Servlet的出生

服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。

而且一个Servlet类型,服务器只创建一个实例对象,例如在我们首次访问http://localhost:8080/helloservlet/helloworld时,服务器通过“/helloworld”找到了绑定的Servlet名称为com.tyschollo.servlet.HelloServlet,然后服务器查看这个类型的Servlet是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建HelloServlet的实例。当我们再次访问http://localhost:8080/helloservlet/helloworld时,服务器就不会再次创建HelloServlet实例了,而是直接使用上次创建的实例。

在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生。这个方法只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。

我们可以把一些对Servlet的初始化工作放到init方法中!

三、Servlet服务

当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!

四、Servlet的离去

Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法,我们可以把Servlet的临终遗言放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。

五、测试生命周期方法

修改HelloServlet如下,然后再去访问http://localhost:8080/helloservlet/helloworld

代码语言:javascript
复制
package com.tyschool.servlet.demo;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet implements Servlet {
	public void init(ServletConfig config) throws ServletException {
		System.out.println("Servlet被创建了!");
	}
	public ServletConfig getServletConfig() {return null;}
	public void destroy() {
		System.out.println("Servlet要离去了!");
	}
	public String getServletInfo() {return null;}

	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		System.out.println("hello servlet!");
	}
}

说明:在首次访问HelloServlet时,init方法会被执行,而且也会执行service方法。再次访问时,只会执行service方法,不再执行init方法。在关闭Tomcat时会调用destroy方法。

测试步骤

​需求:使用Eclipse来创建一个helloservlet项目

A、在Eclipse中创建helloservlet Web项目

image20200208103758386.png
image20200208103758386.png
image20200208103931235.png
image20200208103931235.png
image20200208104141248.png
image20200208104141248.png

B、在项目中创建包

image20200208104355509.png
image20200208104355509.png
image20200208104444237.png
image20200208104444237.png

C、在包中创建Servlet

image20200208105136831.png
image20200208105136831.png
image20200208104544347.png
image20200208104544347.png
image20200208104901638.png
image20200208104901638.png
image20200208104619773.png
image20200208104619773.png
image20200208104710374.png
image20200208104710374.png

d、手动导入tomcat运行环境

image20200208104927012.png
image20200208104927012.png
image20200208104955102.png
image20200208104955102.png
image20200208105044241.png
image20200208105044241.png
image20200208105230748.png
image20200208105230748.png

e、把项目部署到server中

image20200208105649371.png
image20200208105649371.png
image20200208105728024.png
image20200208105728024.png
image20200208105808695.png
image20200208105808695.png
image20200208105826551.png
image20200208105826551.png
image20200208105920769.png
image20200208105920769.png
image20200208110052036.png
image20200208110052036.png

f、浏览器测试

image20200208110221542.png
image20200208110221542.png
image20200208110336991.png
image20200208110336991.png

补充:用实现Servlet接口的方式创建Servlet

image20200208111533939.png
image20200208111533939.png
image20200208111604560.png
image20200208111604560.png
image20200208111632133.png
image20200208111632133.png
image20200208111710086.png
image20200208111710086.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、生命周期概述
  • 二、Servlet的出生
  • 三、Servlet服务
  • 四、Servlet的离去
  • 五、测试生命周期方法
    • 补充:用实现Servlet接口的方式创建Servlet
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档