当前位置: 首页 > 面试题库 >

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

海鸣
2023-03-14
问题内容

我怎么知道我的Vaadin 7 Web应用程序何时首次启动/启动,这样我才能进行一些初始设置?

同样,我怎么知道我的Web应用程序何时结束,关闭/退出?


问题答案:

Vaadin建立在Java
Servlet
技术之上。“上下文”是Servlet术语中Web应用程序的技术术语。因此,这里的答案不是特定于Vaadin的,它适用于任何Servlet-
归根结底,Vaadin只是一个大型Servlet。

从Servlet规范2.3版开始,Servlet容器(例如Tomcat,Jetty等)必须保证可以监视定义为实现ServletContextListener接口的任何Java类。该接口有两种简单的方法:

  • 网络首次启动时会被调用的(contextInitialized
  • 当您的网络应用结束时(contextDestroyed)被调用的一种。

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

每个Servlet容器必须履行的契约是, 执行任何Servlet或过滤器 之前, 必须
contextInitialized 调用 __每个ServletContextListener类(可以有多个)
。因此,这是进行初始化工作的最佳时机,它可能比单个Servlet请求-响应周期受益更多。如果您需要启动[H2
Database)之类的数据库,这是个好时机。如果您将某些数据作为高速缓存加载到内存中以供servlet反复使用,那么这是个好时机。例如,在进行某些日志记录工作或确定某些预期文件时,这也是测试应用程序资源的好时机。

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

我们正在讨论您的Web应用“上下文”的生命周期。该上下文可能涉及一个或多个servlet。上下文的生命周期超出了参与该上下文的任何servlet的生命周期。上下文有点像女王蜂,她在一个新的蜂巢中生出了所有的无人机,在那里她生活在它们的前面,当它们死去服役时,她将使它们死掉(如果这就是蜂巢的样子)作品?)。

定义你的 ServletContextListener

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

在Vaadin应用程序中添加一个新的Java类。您可以根据需要为课程命名。

我将上下文侦听器添加到与我的主要Vaadin应用程序UI类相同的包中(MyUI.java可能是由您的Vaadin插件或Maven原型生成的)。上下文侦听器似乎是很自然的地方,是我的Vaadin应用程序启动前的开始,然后才处理
任何 用户,而指定的UI类将成为我的Vaadin应用程序为 每个 用户运行的第一部分。

将您的课程声明为实现ServleContextListener。添加上面讨论的两种必需方法;您的IDE可能会帮助您完成这项工作。

还有一个技巧:必须将此上下文侦听器告知Servlet容器。有多种方法可以做到这一点,但是我@WebListener在类上使用了最简单的注释。

这是整个示例类。

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." );
    }

}


 类似资料:
  • 正在启动lib/main。调试模式下sdk gphone arm64上的dart。。。正在运行Gradle任务“assembleDebug”。。。✓ 构建/应用/输出/颤振apk/应用调试。阿普克。安装build/app/outputs/flatter apk/app。apk。。。E/AndroidRuntime(22444):致命异常:主E/AndroidRuntime(22444):进程:co

  • 问题内容: 我需要在Java Web应用程序停止或tomcat停止时保存一些数据。如何才能做到这一点?编辑:如果我使用jvm shutdown钩有什么缺点? 问题答案: 使用在您的web.xml 中实现ServletContextListener的类:

  • 是否有一种干净的方法来检测spring启动应用程序何时停止,并在停止之前执行一些操作?一种停止服务的CommandLineRunner 提前谢谢

  • 我正在做一个大学作业,我必须午餐3个服务器处理客户和一个服务器组的领导,这里是场景: 领导者开始。 leader 运行 3 台服务器(必须使用 Runtime.getRuntime().exec() 将它们作为 jar 文件运行); 向服务器发送激活消息以开始为客户端提供服务 客户端开始与服务器通信。 问题是在客户端发出3或4个请求后,服务器挂起,只有当领导者终止时才完成其工作。如果我从cmd手动

  • 我们的webstart应用程序(不是小程序)遇到了奇怪的启动问题。 启动应用程序会显示应用程序启动屏幕,但javaws进程会在不久后终止,不会在对话框、java控制台或日志文件中显示任何错误消息。javaws似乎只是在实际启动实际应用程序之前停止。无论用户尝试从桌面快捷方式还是从网页启动应用程序,都无关紧要。当从本地计算机使用javaw运行而无需webstart时,相同的应用程序可以正常工作。 应

  • 我试图运行我的spring boot应用程序,设置了以下属性,我希望它继续重试从配置服务器加载属性50次,在任何两次尝试之间等待6秒,即使在此之后,它不能连接到配置服务器,它应该恢复启动或退出(我对重试后spring boot能够做的事情无所谓)。但它似乎并不像预期的那样表现。 我的启动命令- 如果您想要一个嵌入式数据库,请在类路径上放置一个受支持的数据库。如果要从特定配置文件加载数据库设置,则可