zoukankan      html  css  js  c++  java
  • servlet生命周期

    1 servlet生命周期中的4个重要方法

    1)构造方法:创建servlet对象,默认情况下,第一次访问servlet的时候创建servlet对象,只调用一次。servlet对象是单实例的。

    2)init方法:创建完servlet对象后调用,只调用一次。

    3)service方法:每次发出请求时调用一次。

    4)destroy方法:销毁servlet对象时候调用。停止tomcat服务器时调用。

    2 Tomtcat内部代码运行:

                 1)通过映射找到到servlet-class的内容,字符串

                2)通过反射构造Servlet对象

                      2.1 得到字节码对象

                      Class clazz = class.forName("Servlet");

                      2.2 调用无参数的构造方法来构造对象

                      Object obj = clazz.newInstance();     ---1.servlet的构造方法被调用

               3)创建ServletConfig对象,通过反射调用init方法

                      3.1 得到方法对象

                      Method m = clazz.getDeclareMethod("init",ServletConfig.class);

                      3.2 调用方法

                      m.invoke(obj,config);             --2.servlet的init方法被调用

               4)创建request,response对象,通过反射调用service方法

                      4.1 得到方法对象

                      Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);

                      4.2 调用方法

                      m.invoke(obj,request,response);  --3.servlet的service方法被调用

               5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法

                      5.1 得到方法对象

                      Method m = clazz.getDeclareMethod("destroy",null);

                      5.2 调用方法

                      m.invoke(obj,null);            --4.servlet的destroy方法被调用

    3 servlet再tomcat中时单实例多线程的,因此如果涉及到共享数据需要注意线程安全问题。及时加锁。

  • 相关阅读:
    cors允许的方法和contype-type
    解决Ubuntu 18.04中文输入法的问题
    "Visual Studio Code is unable to watch for file changes in this large workspace"
    设置spacevim字体显示乱码问题
    python3.6 +tkinter GUI编程 实现界面化的文本处理工具
    Python3.6的组件numpy的安装
    LinQ实战学习笔记(四) LINQ to Object, 常用查询操作符
    SharpGL学习笔记(十九) 摄像机漫游
    SharpGL学习笔记(十八) 解析3ds模型并显示
    SharpGL学习笔记(十七) 立体文字和平面文字
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/6661976.html
Copyright © 2011-2022 走看看