Servlet基础-2
Servlet的生命周期
从第一次调用,到服务器关闭。期间如果删除加载好的servlet,依然能正常使用。因为,servlet已经加载到了tomcat服务器中。此时如果关闭掉服务器重启服务器,则不能使用删除掉的servelt,tomcat无法找到此servlet并将其加载到服务器中。
如果在web.xml 中配置了load-on-startup则是从服务器开启到服务器关闭(只是调用servlet的init()方法)。。
Servlet的方法
- service()是真正处理请求的方法
- init()是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
- destory()是在servlet被销毁时执行,也就服务器关闭时。
web.xml中servlet配置load-on-startup的作用
在servlet的配置当中,1的含义是:标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。(相当于没写,没使用load-on-startup,此时servlet的生命周期没有发生改变)
正数的值越小,启动该servlet的优先级越高。
如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序。
配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;
如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。
PS:一般我们在开发web应用时,都会配置这个参数,有两个好处:
- 1、如果初始化过程失败,则容器会提示启动失败,此时我们能够提前知道相关错误;
- 2、配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可立即响应web请求。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42package com.kylin.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* * Servlet的生命周期:
* 1、从第一次调用到服务器关闭。
* 2、如果Servlet在web.xml中配置了load-on-startup,生命周期为 从服务器启动到服务器关闭
* 注意:
* init方法是对Servlet进行初始化的一个方法,会在Servlet第一次 加载进行存储时执行
* destory方法是在servlet被销毁时执行,也就服务器关闭时。
* @author kylin
*
*/
public class ServletLife extends HttpServlet {
//初始化方法,在servlet第一次加载内容的时候被调用
public void init() throws ServletException {
System.out.println("servlet初始化完成");
}
//service方法,真正处理请求的方法
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("servlet life");
System.out.println("servlet life");
}
public void destroy() {
System.out.println("我被销毁了!");
}
}