挂钩我的 Vaadin Web 应用程序的启动和停止吗?

2024-03-14

我如何知道我的 Vaadin 7 Web 应用程序何时首次启动/启动,以便我可以进行一些初始设置工作?

同样,我如何知道我的网络应用程序何时结束、关闭/退出?


ServletContextListener

Vaadin 建立在Java小服务程序 https://en.wikipedia.org/wiki/Java_Servlet技术。 “上下文”是 Servlet 术语中 Web 应用程序的技术术语。因此,这里的答案不是特定于 Vaadin 的,它适用于任何 Servlet ——而且归根结底,Vaadin 只是一个大 Servlet。

从 Servlet 规范版本 2.3 开始,小服务程序容器 https://en.wikipedia.org/wiki/Web_container例如Tomcat https://en.wikipedia.org/wiki/Apache_Tomcat, Jetty https://en.wikipedia.org/wiki/Jetty_(web_server)等必须保证留意您定义为实现ServletContextListener http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContextListener.html界面。该接口有两个简单的方法:

  • 当您的网站首次启动时被调用的一个(contextInitialized http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContextListener.html#contextInitialized-javax.servlet.ServletContextEvent-)
  • 当你的网络应用程序结束时被调用的一个(contextDestroyed http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContextListener.html#contextDestroyed-javax.servlet.ServletContextEvent-).

结束可能是由于 Servlet 容器(例如:Tomcat)正在关闭,因此所有 Web 应用程序(“上下文”)都正在结束,或者只是您的 Vaadin 应用程序的上下文正在结束(如果您的 Servlet 容器支持按上下文关闭) 。

每个 Servlet 容器必须履行的契约是,每个 ServletContextListener 类(可以有多个)都必须有其contextInitialized调用before任何 servlet 或过滤器执行。因此,这是进行初始化工作的最佳时机,这可能比单个 Servlet 请求-响应周期更有好处。如果您需要启动数据库,例如[H2数据库 http://h2database.com),这是一个好时机。如果您将一些数据加载到内存中作为缓存供 servlet 重复使用,那么这是一个好时机。这也是测试应用程序资源的好时机,例如,确定某些日志记录是否正常工作或某些预期文件是否就位。

同样,每个兼容的 Servlet 容器都会调用contextDestroyed only afterservlet 和过滤器已完成他们最后一次调用。因此,这是关闭数据库、进行备份或执行任何其他适合您的 Web 应用程序的清理工作的好地方。

我们正在讨论网络应用程序“上下文”的生命周期。该上下文可能涉及一个或多个 servlet。上下文的生命周期超出了任一 Servlet 的生命周期 https://en.wikipedia.org/wiki/Java_servlet#Life_cycle_of_a_servlet在此背景下参与。背景有点像蜂王,她在一个新的蜂巢里生下了她所有的雄蜂,她就住在它们之前,当它们尽职尽责地为她服务而死去时,她会比它们活得更久(如果这就是蜂巢的方式)作品?)。

定义你的ServletContextListener

制作一个ServletContextListener非常简单:用一对方法和一个注释创建一个类。

添加一个新的 Java 类作为 Vaadin 应用程序的一部分。您可以为该类命名任何您想要的名称。

我将上下文侦听器添加到与我的主 Vaadin 应用程序相同的包中UI https://vaadin.com/api/com/vaadin/ui/UI.html class (MyUI.java可能是由您的 Vaadin 插件或 Maven 原型生成的)。似乎是一个自然的地方,因为上下文侦听器是我之前启动的 Vaadin 应用程序的开始any用户在指定时被处理UI然后,类将成为我的 Vaadin 应用程序运行的第一个部分each user.

声明你的类正在实现ServleContextListener。添加上面讨论的两个必需的方法;你的IDE https://en.wikipedia.org/wiki/Integrated_development_environment可以协助做这项杂务。

还有一个技巧:您必须告知 Servlet 容器有关此上下文侦听器的信息。有不止一种方法可以做到这一点,但我使用最简单的方法,即注释@WebListener http://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebListener.html在课堂上。

这是一个完整的示例类。

package com.example.amazingapp;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 *
 * @author Basil Bourque
 */
@WebListener
public class WebAppListener implements ServletContextListener {

    @Override
    public void contextInitialized ( ServletContextEvent sce ) {
        System.out.println ( "My Vaadin web app is starting. " );
    }

    @Override
    public void contextDestroyed ( ServletContextEvent sce ) {
        System.out.println ( "My Vaadin web app is shutting down." );
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

挂钩我的 Vaadin Web 应用程序的启动和停止吗? 的相关文章

随机推荐