Servlet的生命周期
Servlet的生命周期:Servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。
以前的对象:new Student(); stu.study(); stu=null;
Servlet程序的生命周期是由tomcat服务器控制的。
Servlet重要的生命周期:
1 public class Demo1 extends HttpServlet{ 2 3 /** 4 * 1.构造方法 5 */ 6 public Demo1() { 7 System.out.println("1.servlet对象被创建了。"); 8 } 9 10 /** 11 * 2.init方法,初始化方法 12 */ 13 @Override 14 public void init(ServletConfig config) throws ServletException { 15 System.out.println("2.init方法被调用"); 16 } 17 18 /** 19 * 3.service方法 20 */ 21 @Override 22 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 23 System.out.println("3.service方法被调用"); 24 } 25 26 /** 27 * destory方法 28 */ 29 private void destory() { 30 System.out.println("4.destory方法被调用"); 31 } 32 }
构造方法:创建Servlet对象的时候调用。默认情况下,第一次访问Servlet的时候创建servlet对象。只调用一次。证明Servlet对象在tomcat是单实例的。
init方法:创建完servlet对象的时候调用。只调用一次。
service方法:每次发出请求时调用。调用n次。
destory方法:销毁servlet对象的时候调用,停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。
伪代码演示Servlet生命周期:
1)通过映射找到servlet-class的内容:字符串:com.maodoer.a_servlet.FirstServlet
2)通过反射构造FirstServlet对象
2.1得到字节码对象
Class clazz=Class.forName("com.maodoer.a_servlet.FirstServlet");
2.2构造对象
Object obj=clazz.newInstance();//1.servlet的构造方法被调用
3)创建一个ServletConfig对象,通过反射调用init方法
3.1得到方法对象
Method m=clazz.getDeclaredMethod("init",ServletConfig.class);
3.2调用方法
m.invoke(obj,config);//2.servlet的init方法被调用
4)创建request,response对象,通过反射去调用service方法。
4.1得到方法对象
Method m=
clazz.getDeclaredMethod("service",HttpServletRequest.class,HttpServletResponse.class);
4.2调用该方法
m.invoke(obj,request,response);//3.Servlet的service方法被调用
5)当tomcat服务器停止或者web应用重新部署,通过反射调用destory方法
5.1得到方法对象
Method m=clazz.getDeclaredMethod("destory",null);
5.2调用方法
m.invoke(obj,null);//4.servlet的destory方法被调用