servlets - 从 Java Web 应用程序调用取消部署的方法

标签 servlets jboss web.xml

我正在开发一个 Java Web 应用程序。该应用程序连接到 Lucene 索引。我创建了 IndexSearcher 的单例实例。该实例打开一些文件。当我重新部署 Web 应用程序时,IndexSearcher 的早期实例打开的文件继续保持打开状态,并且重新部署的应用程序将创建另一个实例。几次重新部署后,系统开始抛出“打开文件过多”异常。我想在重新部署之前关闭旧实例,以便关闭旧文件,但我不知道该怎么做? web.xml 中是否有一个在取消部署时调用的指令,类似于启动时加载?我正在 jboss 服务器上运行 Web 应用程序。

最佳答案

实现ServletContextListener .

@WebListener
public class LuceneConfig implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // Do your job here during webapp startup.
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // Do your job here during webapp shutdown.
    }

}

如果您还没有使用 Servlet 3.0(尽管该版本已经发布 2 年了),那么您需要删除 @WebListener 注释并在 web.xml 中手动注册它如下:

<listener>
    <listener-class>com.example.LuceneConfig</listener-class>
</listener>

关于servlets - 从 Java Web 应用程序调用取消部署的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8184835/

相关文章:

java - 404 带有简单的 java servlet/html 形式

Java EE通过代理获取IP

java - 无法从 doGet 调用 doPost

java - 使用 Guice 注入(inject)不可访问的属性

java - Infinispan 因 java.lang.NoSuchMethodError : org. jboss.marshalling.MarshallingConfiguration.setExternalizerCreator 崩溃

spring-mvc - 如何在 spring mvc 中读取 spring-application-context.xml 和 AnnotationConfigWebApplicationContext

java - Atmosphere 、JBoss AS 7.1.1、Chrome 问题

java - 无法在弹出的 Richfaces 面板中制作 "delete"

java - Tomcat 不提供静态文件

java - 在 Tomcat 中部署 WAR 时出现严重错误。ContainerBase addChildInternal 错误