检测嵌入式Jetty服务器何时完全初始化

检测嵌入式Jetty服务器何时完全初始化,jetty,embedded-jetty,Jetty,Embedded Jetty,我在java应用程序中嵌入了Jetty,并在Jetty服务器对象的实例上调用start()方法(在设置描述静态和动态web内容位置的处理程序列表之后)。start()调用是否会阻塞,直到初始化完成?如果没有,我如何确定服务器何时完全启动并准备好接收请求?以下是我如何在ANT中解决这个问题的一个示例,在jetty应用程序就绪后启动firefox <parallel> <jetty tempDirectory="${work.dir}"> <co

我在java应用程序中嵌入了Jetty,并在Jetty服务器对象的实例上调用start()方法(在设置描述静态和动态web内容位置的处理程序列表之后)。start()调用是否会阻塞,直到初始化完成?如果没有,我如何确定服务器何时完全启动并准备好接收请求?

以下是我如何在ANT中解决这个问题的一个示例,在jetty应用程序就绪后启动firefox

<parallel>
    <jetty tempDirectory="${work.dir}">
        <connectors>
            <selectChannelConnector port="${jetty.port}"/>
        </connectors>
        <webApp name="ex1" warfile="ex1.war" contextpath="/ex1"/>
    </jetty>

    <sequential>
        <waitfor maxwait="10" maxwaitunit="second">
            <http url="http://localhost:${jetty.port}/ex1"/>
        </waitfor>

        <exec executable="firefox" spawn="yes">
            <arg line="http://localhost:${jetty.port}/ex1"/>
        </exec>
    </sequential>
</parallel>

我们有一个嵌入式Jetty应用程序,其中有几十个插件WAR和servlet需要初始化……在应用程序启动时,我从未遇到过浏览器请求超时,因此服务器初始化过程非常快。但是,您可以通过检查来检查Jetty服务器是否仍在启动或准备就绪

Server.isStarting()
Server.isStarted()
Server.isRunning()

HTH

是的,当server.start()返回时,服务器已完全初始化。没有必要做任何其他事情。文档中不清楚这种行为,但我只是通过查看代码来验证它

start()调用是否会阻塞,直到初始化完成

不会。它将在后台运行服务器

如果没有,我如何确定服务器何时完全启动并准备好接收请求

您可以使用
org.eclipse.jetty.server.server#join()
方法

// The use of server.join() the will make the current thread join and
// wait until the server is done executing.
// See
// http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()
server.join();
有关更多信息,请参见[1]

[1]

否,
join()
在服务器准备好处理HTTP请求时不返回,在服务器关闭且不再运行时返回。