3.Servlet的生命周期

2017-07-29  本文已影响22人  峰子1994
1.Servlet的生命周期
以前:以前的程序,java类,自己去new对象,自己去使用对象调用。
现在: sevlet程序。servlet的生命周期由tomcat服务器控制的。
servlet什么时候对象创建,什么销毁,什么时候调用什么方法???
4.2 Servlet的四个生命周期
    构造方法: 在创建servlet对象时调用。只调用1次。证明servlet对象在tomcat服务器中是单实例的。
    init方法:在创建完servlet对象后调用。只调用1次。
    service方法: 在每次请求servlet时调用。调用n次。
    destroy方法: servlet对象销毁时调用。只调用1次。tomcat服务器停止或web应用重新部署时调用
4.3 用伪代码模拟tomcat服务器如何调用servlet生命周期
浏览器输入: http://localhost:8080/day10/hello
得到字符串: gz.itcast.a_servlet.HelloServlet
1)tomcat服务器通过反射构造对象
    1.1 得到字节码对象
        Class clazz = Class.forName("gz.itcast.a_servlet.HelloServlet ");
    1.2 构造对象
        Object hello = clazz.newInstance();       --1) servlet的构造方法被调用

2)tomcat服务器调用init方法
    2.1 得到init方法对象
        Method m = clazz.getDeclareMethod("init",ServeletConfig.class);
    2.2 执行方法
        m.invoke(hello,config);                --2)servlet的init方法被调用

3)tomcat服务器创建request和response对象,调用service方法
        3.1 得到service方法对象
        Method m = clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletRespnose.class);
        3.2 执行方法
                        m.invoke(hello,request,response);       --3)servlet的service方法被调
4)tomcat服务器停止或web应用重新部署时,tomcat服务器调用destroy方法
        4.1 得到destroy方法对象
        Method m = clazz.getDeclareMethod("destroy",null)
        4.2 执行方法
        m.invoke(hello,null);                   --4)servlet的destroy方法被调用
2.LiftServlet的代码
/**
    测试Servlet的生命周期:
         1.构造方法 (只是调用一次)
         2.init初始化方法(只是调用了一次)
         3.service方法 (多次调动)
         4.destroy方法 (调用一次,服务器重新部署的时候,或者是服务器关闭重新启动的时候)
    这些方法都是通过反射机制去调用的
 */
public class LiftServlet extends HttpServlet {
    public  LiftServlet(){
        System.out.println("servlet的构造方法");
    }
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init方法被调用了");
    }
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("service方法被调用了");
    }
    @Override
    public void destroy() {
        System.out.println("destroy方法被调用了");
    }
}
上一篇下一篇

猜你喜欢

热点阅读