【发布时间】:2016-03-13 07:00:34
【问题描述】:
我想使用在 restlet jar 文件中作为扩展提供的码头连接器。我将以下 jar 添加到我的 Restlet 应用程序包的类路径中。
org.restlet.ext.jetty.jar
我将 Http 或 HTTPS 服务器添加到组件中,如下所示。
private Component m_Component = new Component();
private void addHTTPServer() throws Exception
{
m_Component.getServers().add( Protocol.HTTP, 8484 );
}
private void addHTTPsServer() throws Exception
{
File keystore = new File( m_KeyStoreFile );
Server server = m_Component.getServers().add( Protocol.HTTPS, 8484 );
Series<Parameter> parameters = server.getContext().getParameters();
parameters.add( "keystorePath", keystore.toPath().toString() );
parameters.add( "keystorePassword", "Localstorepass" );
parameters.add( "keystoreType", "JKS" );
parameters.add( "keyPassword", "Localkeypass" );
}
这是服务器启动时的输出。
2015 年 12 月 8 日上午 11:44:59 org.restlet.engine.connector.NetServerHelper 开始
INFO:在端口 8484 上启动内部 [HTTPS/1.1] 服务器
2015 年 12 月 8 日上午 11:44:59 org.restlet.Application 开始
信息:启动 de.hsag.services.restlet.application.RestletApplication 应用
是否可以将其配置为直接使用 Jetty 作为服务器连接器?
更新:
正如下面的答案中提到的,确保在激活 org.restlet.ext.jetty.jar 包后初始化组件就可以了。 所以我让我的restlet激活器类实现了BundleListener接口并在BundleEvent告诉我码头扩展jar被激活时启动组件。
@Override
public void bundleChanged( BundleEvent event )
{
if( event.getBundle().getSymbolicName().equalsIgnoreCase( "org.restlet.ext.jetty" ) ) {
if( event.getBundle().getState() == Bundle.ACTIVE ) {
private Component m_Component = new Component();
m_Component.getServers().add( Protocol.HTTP, 8484 );
...
}
}
}
另外我为jetty添加了以下jar文件。
javax.servlet.jar
org.eclipse.jetty.http.jar
org.eclipse.jetty.io.jar
org.eclipse.jetty.server.jar
org.eclipse.jetty.util.jar
现在我可以看到自动选择了码头:
> Dec 11, 2015 12:36:23 AM org.restlet.ext.jetty.JettyServerHelper start
> INFO: Starting the Jetty [HTTPS/1.1] server on port 8484
【问题讨论】: