bug*_*gs_ 6 java web.xml servlets log4j java-ee
我有一个Java Web应用程序.
我可以init()通过以下参数指定servlet 上调用方法的顺序web.xml:
<load-on-startup>1</load-on-startup>
Run Code Online (Sandbox Code Playgroud)
但是,我如何指定调用destroy()方法的顺序?
实际上,我需要做的就是最后关闭log4j.但事先我想知道调用destroy()方法是否有一些规则.
我看了一下Servlet 3.0规范.它没有定义destroy必须调用方法的顺序的任何规则.因此,它未指定,您不应该依赖任何供应商特定的行为.不释放Servlet共享资源的第二个原因是,任何时候都可以销毁给定的Servlet - 如果容器选择这样做的话.请参阅Servlet 3.0规范的2.3.4节:
2.3.4服务终止
servlet容器不需要在任何特定时间段内加载servlet.对于servlet容器的生命周期(可能是几天,几个月或几年),或者介于两者之间的任何时间量,servlet实例可以在servlet容器中保持活动状态一段时间.
当servlet容器确定应该从服务中删除servlet时,它调用 Servlet接口的destroy方法以允许servlet释放它正在使用的任何资源并保存任何持久状态.例如,容器可以在想要节省内存资源时或在关闭时执行此操作
假设您有3个Servlet - A,B和C.如果A和B依赖于C管理的资源,则容器可能会通过调用其destroy方法来决定暂时禁用C.因此A和B将无法再访问这些资源.我必须承认,我从未在现实中看到过这种行为.
建议:
使用ServletContextListener.它保证只被初始化和销毁一次.
| 归档时间: |
|
| 查看次数: |
4547 次 |
| 最近记录: |