public class LifeServlet extends HttpServlet {
//构造方法--执行一次
public LifeServlet(){
System.out.println("LifeServlet");
}
//服务请求--每一次请求都会执行
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// GET /Post
String method = req.getMethod();
System.out.println(method);
if("GET".equals(method)){
doGet(req, resp);
}else if("POST".equals(method)){
doPost(req, resp);
}
}
//销毁方法--关闭服务器时候执行--执行一次
@Override
public void destroy() {
System.out.println("destroy");
}
//初始化方法--执行一次
@Override
public void init() throws ServletException {
System.out.println("init");
}
}
1.我们由方法的输出顺序可以得知servlet是一个[单实例多线程]的应用
2.Servlet 的生命周期
servlet/LifeServlet--->LifeServlet-->LifeServlet--->com.bjsxt.servlet.LifeServlet
[1]类加载
Class clazz= Class.forName("com.bjsxt.servlet.LifeServlet");
Object obj= clazz.newInstance();
[2]实例化--构造方法--离不开反射
[3]初始化--init--离不开反射
[4]服务请求--service--离不开反射
[5]销毁操作--destroy--离不开反射
3.类加载的时机
【1】默认是第一次访问当前servlet的时候被加载
【2】配置这个标签就会启动服务器就加载指定的servlet
<load-on-startup>0</load-on-startup>