当前位置:首页>开发>正文

servlet在什么时候调用destroy方法 servlet为什么没有调用destroy方法

2023-06-19 02:33:28 互联网 未知 开发

 servlet在什么时候调用destroy方法 servlet为什么没有调用destroy方法

servlet在什么时候调用destroy方法

destroy方法在容器移除servlet 时执行,同样只执行一次。这个方法会在所有的线程的service()方法执行完成或者超时后执行,调用这个方法后,容器不会再调用这个servlet的方法,也就是说容器不再把请求发送给这个servlet。这个方法给servlet释放占用的资源的机会,通常用来执行一些清理任务。

servlet为什么没有调用destroy方法

问题应该不是关闭Socket,而是怎么关闭启动的那个线程。
建议这么做:用Servlet所开启的线程,设置为setDaemon(true);这样系统就不会因为该线程存在而不终止整个进程了。
不过Servlet的destroy方法应该是会被执行的,除非写错了,可以用输出日志的方式来看看是否被调用。

一个servlet实例的destroy发生在什么时候

Servlet引擎并不必需保证一个Servlet在任何时候或在服务开启的任何时候都被载入。Servlet引擎可以自由的在任何时候使用或清除一个Servlet。因此,我们不能依赖一个类或实例来存储重要的信息。
  当Servlet引擎决定卸载一个Servlet时(例如,如果这个引擎被关闭或者需要让资源),这个引擎必须允许Servlet释放正在使用的资源并存储有关资料。为了完成以上工作,引擎会调用Servlet的destroy()方法。
  在卸载一个Servlet之前,Servlet引擎必须等待所有的service()方法完成或超时结束(Servlet引擎会对超时作出定义)。当一个Servlet被卸载时,引擎将不能给Servlet发送任何请求。引擎必须释放Servlet并完成无用存储单元的收集.

Servlet关闭时候destroy()函数没调用

你要正常关闭web服务器才行。如果你是强制关掉服务器,那么肯定不会执行destroy方法的。

如果你用Eclipse开发启动的服务器,那么你得使用它的正常关闭服务器按钮就可以了。

如果使用Tomcat服务器,你使用shutdown.bat即可。其他的服务器也是同理。

最后:只有走正常关闭才会执行你的Servlet的销毁方法,ServletContextListener也是这样子的。

最新文章