共计 2068 个字符,预计需要花费 6 分钟才能阅读完成。
一、生命周期概述
所谓 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
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 项目
B、在项目中创建包
C、在包中创建 Servlet
d、手动导入 tomcat 运行环境
e、把项目部署到 server 中
f、浏览器测试