代码之家  ›  专栏  ›  技术社区  ›  Basil Bourque

为什么在Vaadin Flow 11web应用程序中,`onAttach`在Tomcat下运行两次,而在Jetty下只运行一次?

  •  0
  • Basil Bourque  · 技术社区  · 6 年前

    Base Starter 只是增加了对 onAttach 方法。当您的组件连接到屏幕上的显示时,Vaadin框架将调用此方法。因此,如果只运行一次应用程序,我们应该看到这个方法被调用一次。

    package com.basilbourque.example;
    
    import com.vaadin.flow.component.AttachEvent;
    import com.vaadin.flow.component.button.Button;
    import com.vaadin.flow.component.notification.Notification;
    import com.vaadin.flow.component.orderedlayout.VerticalLayout;
    import com.vaadin.flow.router.Route;
    
    /**
     * The main view contains a button and a click listener.
     */
    @Route ( "" )
    public class MainView extends VerticalLayout {
    
        public MainView () {
            Button button = new Button( "Click me" ,
                event -> Notification.show( "Clicked!" ) );
            add( button );
        }
    
        @Override
        protected void onAttach ( AttachEvent attachEvent ){
            System.out.println( "onAttach running for `MainView` class. attachEvent.toString(): " + attachEvent + ". System.identityHashCode(this): " + System.identityHashCode(this));
        }
    }
    

    当使用捆绑的Jetty web容器运行时,我看到:

    转速表正在运行 MainView 班级。attachEvent.toString():com.vaadin.flow.component.attachEvent[source=com.basilbourque.example。MainView@454ff330]. 系统识别码(this):1162867504

    但是,当我在外部运行Tomcat 9.0.12以供IntelliJ Ultimate edition 2018.3调用时,我看到:

    转速表正在运行 班级。attachEvent.toString():com.vaadin.flow.component.attachEvent[source=com.basilbourque.example。MainView@21b91e99]. 系统识别码(this):565780121

    转速表正在运行 主视图 班级。attachEvent.toString():com.vaadin.flow.component.attachEvent[source=com.basilbourque.example。MainView@5ee75022]. 系统识别码(this):1592217634

    请注意,两个输出末尾的标识哈希是不同的。看来我是 获取两个 主视图 尽管只有一个用户(部署和启动Tomcat后IntelliJ会自动在浏览器中打开一个页面)创建。

    为什么是 转速计 在外部Tomcat上运行两次,但在内部Jetty上只运行一次?

    可能与 this Question this Question ?


    Application context 关于IntelliJ Run/Debug Configuration (在第二个选项卡上, Deployment )从 /bogus_war_exploded / ,然后我得到 主视图 跑步。

    班级。attachEvent.toString():com.vaadin.flow.component.attachEvent[source=com.basilbourque.example。MainView@4664fd83]. 系统识别码(this):1181023619

    主视图 班级。attachEvent.toString():com.vaadin.flow.component.attachEvent[source=com.basilbourque.example。MainView@2390403]. 系统识别码(this):37291011

    转速表正在运行 班级。attachEvent.toString():com.vaadin.flow.component.attachEvent[source=com.basilbourque.example。MainView@461aa7e4]. 系统识别码(this):117612036

    更奇怪的是,如果我关闭了在部署时在web浏览器中自动打开Tomcat应用程序的URL的功能,也就是说,如果我取消选中 After launch Open browser 第一个选项卡的部分 Server Run/Debug Configurations ,然后我只得到了单身 主视图 实例。我必须在浏览器中手动打开一个页面,然后粘贴URL http://localhost:8080/bogus_war_exploded


    讽刺的是,我放弃了使用NetBeans,买了IntelliJ来避免类似的bug行为。请参见堆栈溢出, Tomcat deploying the same application twice in netbeans .


    我正在使用:

    • Azul Systems通过Zulu JVM实现Java 10.0.2(基于OpenJDK)
    • Tomcat 9.0.12版
    • 码头9.4.11.v20180605
    • 项目创建自 基础起动器
    • 马科斯高地
    0 回复  |  直到 4 年前
    推荐文章