zoukankan      html  css  js  c++  java
  • 方法服务器Servlet的生命周期

    废话就不多说了,开始。。。

        

             方法和服务器

        

    Servlet的生命周期定义了一个Servlet如何被载加、初始化,以及它怎样收接请求、应响请求、供给服务。在网上找到一张关于Servlet生命周期的图解,我在旁边加标了中文(红色示表畸形执行的线路,蓝色示表异常抛出)说到生命周期之前,可能先对于几个Servlet方法有个解了会有助于深刻理解Servlet生命周期:

        

    1)init()方法
          在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或户客机初次拜访Servlet时装入Servlet。无论有多少户客机拜访Servlet,都不会重复执行init();

        

    2)service()方法
          它是Servlet的核心。每当一个户客请求一个HttpServlet对象,该对象的Service()方法就要用调,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“应响”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默许的服务功能是用调与HTTP请求的方法响应的do功能。

        

    3)destroy()方法
          仅执行一次,在服务器端停止且载卸Servlet时执行该方法,有点类似于C++的delete方法。一个Servlet在运行service()方法时可能会生产其他的线程,因此要需认确在用调destroy()方法时,这些线程经已终止或成完。

        

             那么在现开始谈Servlet的生命周期,它始于装入Web服务器的存内时,并在终止或新重装入Servlet时结束。

        

    一、载加和例实化Servlet
           Tomcat服务器在如下时辰载加和例实化Servlet:

        

               a) 如果已配置动自装入选项,则在启动服务器时动自载入。
               b) 在服务器启动后,户客机初次向Servlet出发请求时。
               c) 新重装入Servlet时。

        每日一道理
    毅力,是千里大堤一沙一石的凝聚,一点点地累积,才有前不见头后不见尾的壮丽;毅力,是春蚕吐丝一缕一缕的环绕,一丝丝地坚持,才有破茧而出重见光明的辉煌; 毅力,是远航的船的帆,有了帆,船才可以达到成功的彼岸。

        

             当启动Servlet容器时,容器首先去查找一个配置文件web.xml,这个文件中记录了可心供给服务的Servlet。个每Servlet被指定一个Servlet名,也就是这个Servlet现实对应的Java的完全class文件名。Servlet容器会为个每动自装入选项的Servlet创立一个例实。所以,个每Servlet类必须有一个共公的无参数的构造器。

        

    二、初始化
             当Servlet被例实化后,Servlet容器将用调个每Servlet的init方法来例实化个每例实,执行完init方法后之,Servlet处于“已初始化”态状。所以说,一旦Servlet被例实化,那么必将用调init方法。通过Servlet在启动后不当即初始化,而是收到请求后停止。在web.xml文件用中<load-on-statup> ...... </load-on-statup>对Servlet停止先预初始化。如上图所示,初始化失败后,执行init()方法抛出ServletException异常,Servlet对象将会被垃圾回收器回收,当户客端第一次拜访服务器时载加Servlet实现类,创立对象并执行初始化方法;这类况情:如Servlet与一个没有启动的据数库接连时。

        

    三、请求理处
           对于达到服务器的户客机请求,服务器创立特定于请求的一个“请求”对象和一个“应响”对象。用调service方法,这个方法可以用调其他方法来理处请求。Service方法会在服务器被拜访时用调,Servlet对象的生命周期中service方法可能被多次用调,由于web-server启动后,服务器中开公的部份源资将处于网络中,当网络中的不同主机(户客端)发并拜访服务器中的统一源资,服务器将开设多个线程理处不同的请求,多线程同时理处统一对象时,有可能现出据数发并拜访的错误。

        

            另外意注,多线程不免同时理处统一变量时(如:对统一文件停止写作操),且有读写作操时,必须斟酌否是加上同步,同步加添时,不要加添围范过大,有可能使程序变成纯粹的单线程,大大减弱了系统性能;只要需做到多个线程安全的拜访雷同的对象就能够了;

        

    四、终止Servlet
          当服务器不再要需Servlet例实或新重装入时,会用调destroy方法,用使这个方法,Servlet可以释放掉全部在init方法请申的源资。一个Servlet例实一旦终止,就不答应再次被用调,只能等待被载卸。

        

    五、载卸Servlet
          Servlet一旦终止,Servlet例实即可被垃圾回收,处于“载卸”态状,如果Servlet容器被关闭,Servlet也会被载卸,一个Servlet例实只能初始化一次,但可以创立多个雷同的Servlet例实。如雷同的Servlet可以在根据不同的配置参数接连不同的据数库时创立多个例实。

    文章结束给大家分享下程序员的一些笑话语录: 问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?  
      答:因为李艳红这种败类,所以我没女友!

  • 相关阅读:
    18.12.30 【sssx】Trie图
    18.12.30 【sssx】线段树
    18.12.25 POJ 1039 Pipe
    18.12.25 POJ 3525 Most Distant Point from the Sea(半平面+二分)
    18.12.25 POJ 1228 Grandpa's Estate
    18.12.22 luogu P3047 [USACO12FEB]附近的牛Nearby Cows
    18.12.21 DSA 中缀表达式的值
    18.12.21 luogu P3650 [USACO1.3]滑雪课程设计Ski Course Design
    18.12.21 【USACO】Times17
    18.12.20 DSA Full Tank?(DP+BFS)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3069927.html
Copyright © 2011-2022 走看看