我需要在init方法中从服务器到我的servlet获取一些服务器属性,之前任何请求执行(在init方法中)。实际上我得知所有工作在这个服务器连接器上的列表,所有工作的webapps,最重要的是, - 端口号或连接器。 所需的码头版本 - 最多8个版本,包括。
所以我需要像org.eclipse.jetty.server.Server
这样的东西,但不是为了embdeded,而是来自现有的服务器,我的servlet正在运行。
对于使用此信息操作的webapp部署者,此信息应该在码头上。但我无法找到。
答案 0 :(得分:4)
在Jetty的start.ini
中启用JMX将允许您使用类似于以下内容的代码:
final MBeanServer mBeanServerConnection = ManagementFactory.getPlatformMBeanServer();
final String[] portAttribute = new String[] {"port"};
// Jetty 9 MBeans
final ObjectName webappcontext9 = new ObjectName("org.eclipse.jetty.webapp:context=*,type=webappcontext,id=*");
final Set<ObjectName> webappcontexts9 = mBeanServerConnection.queryNames(webappcontext9, null);
for (final ObjectName objectName : webappcontexts9) {
System.out.println(objectName.getKeyProperty("context"));
}
final ObjectName serverconnector9 = new ObjectName("org.eclipse.jetty.server:context=*,type=serverconnector,id=*");
final Set<ObjectName> serverconnectors9 = mBeanServerConnection.queryNames(serverconnector9, null);
for (final ObjectName objectName : serverconnectors9) {
System.out.println("listening port for " + objectName.getCanonicalName() + " is " + mBeanServerConnection.getAttributes(objectName, portAttribute).asList().get(0).getValue());
}
// Jetty 8 and 7 MBeans
final ObjectName webappcontext8 = new ObjectName("org.eclipse.jetty.webapp:type=webappcontext,id=*,name=*");
final Set<ObjectName> webappcontexts8 = mBeanServerConnection.queryNames(webappcontext8, null);
for (final ObjectName objectName : webappcontexts8) {
System.out.println(objectName.getKeyProperty("name"));
}
final ObjectName serverconnector8 = new ObjectName("org.eclipse.jetty.server.nio:type=selectchannelconnector,id=*");
final Set<ObjectName> serverconnectors8 = mBeanServerConnection.queryNames(serverconnector8, null);
for (final ObjectName objectName : serverconnectors8) {
System.out.println("listening port for " + objectName.getCanonicalName() + " is " + mBeanServerConnection.getAttributes(objectName, portAttribute).asList().get(0).getValue());
}
当然,您需要将Jetty配置为最后加载包含此代码的Web应用程序,否则将无法获取其他Web应用程序的完整列表。