如何在请求随机可用端口之后发现嵌入式Jetty端口?

32
Server server = new Server(0);   
(..)
server.start();
// this returns _zero_ ?!?!
int listeningPort = server.getConnectors()[0].getPort();
我正在使用嵌入式Jetty 7 API。将零传递给Server(int)构造函数会导致Jetty自动分配一个可用端口,如何发现分配的端口号?
我已经阅读了文档,但找不到这个信息。
谢谢。

4
找到了!使用getLocalPort而不是getPort()! - Leo
1
这是一种非常有用的测试技术。 - Robert Tupelo-Schneck
2个回答

43

getPort()函数返回已配置的端口值。

尝试server.getConnectors()[0].getLocalPort(),它应该返回所选端口。

对于Jetty 9:

您需要使用((ServerConnector)server.getConnectors()[0]).getLocalPort()

在这两种情况下,您需要先调用server.start()


3
启动服务器非常重要。如果您在服务器运行之前尝试获取端口,它将返回“-1”。 - knittl
在我的情况下,使用嵌入式Jetty,我不得不手动创建并添加连接器,否则在调用server.start()后我将没有连接器。这里是Kotlin代码:server.addConnector(ServerConnector(server).apply { port = 0 })然后我能够使用@paskos建议的技术来获取端口。 - Pierre Thibault

8

除了@pascos的回答,你也可以通过以下方法获取所选端口:

server.getURI().getPort(); // e.g: 44759

如果您想获取整个服务器URL(包括端口),可以进行以下操作:
server.getURI().toString(); // e.g: http://127.0.0.1:44759/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接