1、生命周期
servlet是一个单实例 多线程的程序
servlet的生命周期
【1】类加载
“com.java.servlet.LifeServlet”
Class clazz= Class.forName(“com.java.servlet.LifeServlet”);
【2】实例化 (离不开反射)
Object obj= clazz.newInstance();
【3】 初始化(离不开反射)
【4】服务请求(service)(离不开反射)
【5】 销毁操作(离不开反射)
2、类加载的时机
【1】默认的情况是第一次访问servlet的时候进行类加载
【2】<load-on-startup>0</load-on-startup>
(当启动服务器时候加载) 数字越小加载的时机越往前
3、代码实现
//实例化方法 执行一次
public LifeServlet(){
System.out.println("LifeServlet.LifeServlet()");
}
//请求服务---每一次请求都会执行
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("LifeServlet.doGet()");
}
//请求服务---每一次请求都会执行
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("LifeServlet.doPost()");
}
//判断调用doget还是dopost--执行多次
@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);
}else {
System.out.println("执行其他的方法");
}
}
//销毁操作 关闭服务器执行一次
@Override
public void destroy() {
System.out.println("LifeServlet.destroy()");
}
//初始化方法 ----执行一次
@Override
public void init() throws ServletException {
System.out.println("LifeServlet.init()");
}
}