方法服务器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可以在根据不同的配置参数接连不同的据数库时创立多个例实。

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

posted @ 2013-05-09 20:47  坚固66  阅读(270)  评论(0编辑  收藏  举报