美文网首页
3.Servlet的生命周期

3.Servlet的生命周期

作者: 峰子1994 | 来源:发表于2017-07-29 18:00 被阅读22次
    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方法被调用了");
        }
    }
    

    相关文章

      网友评论

          本文标题:3.Servlet的生命周期

          本文链接:https://www.haomeiwen.com/subject/rseclxtx.html