04 servlet 生命周期

研究servlet的生命周期,就是研究servlet在什么时候创建对象,时候调用什么方法,在什么时候销毁对象。

以前: new Student();
现在: servlet是由tomcat服务器执行的生命周期。

Sevlet的四个重要的生命周期方法:
构造方法: 创建servlet对象时调用,只调用1次,证明了sevlet是单例的。
init方法: 创建完对象之后调用。只调用1次。该方法用于初始化对象。
service方法: 在每次请求时调用,调用n次。该方法入口方法,我们的逻辑代码在这里被调用。
destory方法:在servlet对象销毁之后调用。只调用1次。重新部署网站或者停止服务器,servlet对象就会销毁了。

用伪代码演示tomcat服务器如何调用四个方法:
通过url-pattern得到字符串: com.xxjqr.dd.HelloServlet

1. 通过反射,创建HelloServlet的对象
    1.1 得到HelloServlet的CLass对象
    Class clazz = Class.forName("gz.itcast.a_servlet.HelloServlet ")
    1.2 通过class对象调用构造方法
    Object obj  =  clazz.newInstance();  调用无参的构造方法。  --1)构造方法被调用

2. 通过反射,调用init方法
    2.1 得到init方法对象
    Method m =clazz.getDeclaraeMethod("init",ServletConfig.class);//声明参数类型
    2.2 调用方法
    m.invoke(obj,config);                      --2)init方法被调用
        
3. 通过反射,调用service方法
    3.1 得到service方法对象
    Method m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
    3.2 调用方法
    m.invoke(obj,request,response);          --3)service方法被调用
            
4. 通过反射,调用destroy方法
    4.1 得到destroy方法对象
    Method m= clazz.getDeclareMethod('destroy",null);
    4.2调用方法
    m.invoke(obj,null);                --4)destroy方法被调用

代码演示:

public class LifeCycleDemo extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LifeCycleDemo() {
        System.out.println("构造方法被调用啦!!!");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init方法被调用啦!!!");
    }
    
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        System.out.println("service方法被调用啦!!!");
    }
    
    @Override
    public void destroy() {
        System.out.println("destroy方法被调用啦!!!");
    }
}
Paste_Image.png
补充:

自动加载的配置:
我们在第一次访问网站时,servlet才开始初始化,创建,并调用一次service方法;这样对第一次访问来说,响应比较慢;所以可以在这个站点启动的时候就创建servlet对象;
在server.xml中找到对应的servlet进行配置;
各种servlet的启动数字不要一样,数字越大,优先级越低

Paste_Image.png

两个init方法作用:
init(ServletConfig) :这个有参数的init方法的作用就是Servlet的其中一个重要的生命周期方法。这个方法一定会被tomcat服务器调用。

init():这个无参的init方法的作用就是为了提供给开发者方便去覆盖,覆盖这个方法,可以在此方法编写初始化的逻辑。这个方法才是真的给开发者做初始化逻辑的方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0 系列目录# WEB请求处理 WEB请求处理一:浏览器请求发起处理 WEB请求处理二:Nginx请求反向代理 本...
    七寸知架构阅读 14,750评论 22 190
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,929评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,444评论 11 349
  • Servlet学习的大纲 servlet概念及相关接口简介 servet 执行过程 servlet映射路径 缺省s...
    奋斗的老王阅读 4,913评论 1 51
  • 本文包括: Servlet简介关于Servlet的一些类 Servlet生命周期 ServletConfig获得初...
    廖少少阅读 9,350评论 1 67