官方文档上说:Servlet引擎必须等待所有的service()方法完成或超时结束之后才会销毁这个servlet
我想问的是:一个web项目,当有多个用户访问了一个servlet,当都访问结束以后servlet是不是会立即被销毁掉
或者是有什么设置超时的配置在多长时间将会被销毁????

解决方案 »

  1.   

    servlet是单例的
    不会被销毁
    除非容器关闭或者手动销毁至于那里可以配置超时时间
    等待高手解答   学习下
      

  2.   

    SERVLET不会立即销毁,当有多个用户访问SERVLET的时候 系统会销毁一个长时间不用的SERVLET~这是SERVLET与CGI(公共网关接口)的一个区别,CGI是用完立刻销毁
      

  3.   

    servlet不是有生命周期的?
    最后调用destroy销毁?
      

  4.   

    额,servlet是我们可以自己设定存活周期的,一般toncat默认的30分钟不操作就会servlet过期,你可以设置,这个很长时间没设置,貌似是在web.xml中能设置,还有你可以进去comcat后台进行管理项目中servlet存活时间和重新部署项目,还有就是可以手动销毁servlert。呵呵
      

  5.   

    servlet有个detroy方法,不过没测试过
      

  6.   

    只要tomcat服务正常工作就不会销毁,不然那些服务器就不稳定了!
      

  7.   

    楼主参考的资料应该是好多年前的吧!那时候是CGI时代,为每一个请求启动一个servlet。
    现在都改servlet容器单独处理了,为每一个请求启动一个线程,浏览器关闭或服务器超时则释放资源。servlet是服务启动时调用init方法启动servlet,然后service负责处理请求,服务关闭则调用distory方法关闭servlet。servlet是请求处理的核心。
      

  8.   

    我觉得楼主可以在destroy()方法中写个输出测试 观察下看什么时候销毁无聊的servlet
      

  9.   


    要搞清楚doGet和doPost是在service中被调用的,doGet和doPost执行完返回信息了不代表service也执行完了
      

  10.   

    关闭服务器,或请求超时,调用destory方法,这样那么你的servlet才会被销毁……
      

  11.   

    关闭或者重启服务器!!!!!!!!就是在这个时候调用的destroy方法
      

  12.   

    关闭服务器,或请求超时,或者当你把这个类改变保存时,就会自动调用destroy() 这个方法,销毁这个servlet实例!
      

  13.   

    看了这么就还是不明白,关闭或重启服务器肯定会销毁servlet,但是超时的话希望有高手详细描述一下。路过,学习
      

  14.   

    楼上不少人说用destory()来测试,其实不正确。
    servlet的几个生命周期方法,都是回调方法,由容器托管,应用程序自身无法调用。就像线程的run方法一样。所以你调用了是看不出任何效果的。至于其生命周期,确实,一般来说service方法一结束基本可以说该servlet生命周期即结束了。jsp本质就是servlet,每个请求页面结束,servlet就结束了。占有的资源有gc来处理。
    Servlet生命周期结束:1)容器重启关闭,2)servlet的service方法结束返回目前没听说过可以控制Servlet的生命周期长短。有人说在web.xml的默认30分钟的控制,那个好像是HttpSession的默认超时时间吧
      

  15.   

    假设j2ee规范允许程序可以控制servlet的长短话,那么如果有程序员恶意设置servlet生命周期超短,刚刚起来就死掉,这个程序那是没有任何用处的。
      

  16.   

    来学习~不过楼上那几位不是说让你调用destory方法 是在destory写一些东西看在销毁的时候能不能被执行
      

  17.   

    感谢指出错误,呵呵。
    不过我还有个疑问,这段话的意思是不是指的web容器调用destory()仅仅是代表这个servlet实例生命周期完结,而对象被销毁确是gc垃圾车过来之后,所以说根据destory()方法的调用来判断对象实例被销毁是无用的?我想web容器在没有找到没有被调用destory()的实例的时候会新建一个实例,而不会使用那个被调用了destory()而还未被gc带走的那个实例?
      

  18.   

    servlet的生命周期
    init()、service()和destroy()方法来表示(1)加载和实例化 (2)初始化(3)请求处理(4)服务终止
    有个detroy方法来销毁
      

  19.   

    关他什么时候销毁干什么用就行了,知道他销毁时会调用destroy方法就行
      

  20.   

    如果struts没有spring管理的话是单历模试,除非是服务器关闭才会销毁
      

  21.   


    struts1的核心是servlet的,strust2 的前端控制器是个Filter吧 
      

  22.   

    servlet是个多线程,它实例化是由容器实例化,它是线程不安全的
    服务器启动时servlet实例化,销毁是服务器关闭就销毁
    要手动销毁可以调用detroy方法
      

  23.   

    查了些资料,个人的看法供大家参考:
    (1)首先,能够获得大家一致认可的是,不论一个servlet保存多长时间,它的生存周期肯定会短于容器的生存期,servlet实例在容器被移除之前被销毁,即所谓的“皮之不存,毛何附焉”;
    (2)servlet生存期的定义,包括加载、实例化、初始化、处理客户端请求以及如何被移除。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
    (3)重点是:servlet采用的是单实例,多线程模式,即在同一时刻,容器中只存在某servlet的一个实例;同时,多请求(用户)会获得多个线程来运行同一个实例;
    (4)在容器生命周期内,不同时间段会生存servlet的不同实例,可以理解为:A servlet在“时间段一”存在实例A.1,在“时间段二”会存在实例A.2;容器可以根据需要对长时间没有被请求的servlet实例销毁,在必要的时候再生成。
    (5)对于容器销毁servlet的时机,则需要研究servlet的内部运行机制,请高人赐教。可以肯定的是调用destroy()方法来销毁servlet实例。参考:http://topic.csdn.net/u/20090319/14/C2DC3DDC-BEF4-4AA8-881F-58559D137351.html
      

  24.   

    servlet 在 stop service 时或者 restart service 时被销毁。
      

  25.   

    servlet的生命周期是服务启动(调用init)处理请求(service)服务关闭(调用distory)周期结束,整个过程只用一个servlet。
      

  26.   

    和applet一样,destroy是销毁时被调用,不是调用了就销毁。