3

Jetty と SPDY を使用して JDK8 に戻りましたが、Jetty 9.2 が NPN の代わりに ALPN プロトコルをサポートしていることがわかります (私の質問How to run Jetty with SPDY on JDK8? を参照してください)。だから私は設定しましたbootclasspath

java -Xbootclasspath/p:c:/jars/alpn-boot/alpn-boot-8.0.0.v2014031 ...

しかし今、私は例外を得ました:

Exception in thread "xyz.server" java.lang.NoClassDefFoundError:
        org/eclipse/jetty/npn/NextProtoNego$ServerProvider
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    ...
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:63)
    at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:53)
    at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:43)
    at xyz.my.my_httpsrv_jetty.startHTTPSServer(my_httpsrv_jetty.java:359)
    ...

私はjava version "1.8.0_05"桟橋9.2.2.v20140723を使用しています。

JDK 1.7 とalpn-boot-7.0.0.v20140317.jarWinXP で同じエラーが発生しました。-Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar

この execption は、私のコードで次を指しています。

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);

ALPN jetty でも npn-boot のクラスが必要なようです。それはバグですか、それとも何か間違ったことをしましたか?

4

1 に答える 1

4

HTTPSPDYServerConnectorは ALPN に更新されておらず、現在 NPN の使用をハードコードしています。

SPDY で ALPN を使用するには、ServerConnector代わりに次のように構成する必要があります。

SslContextFactory sslContextFactory = new SslContextFactory();
HttpConfiguration httpConfig = new HttpConfiguration();

SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, "alpn");
ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory("spdy/3", "http/1.1");
alpn.setDefaultProtocol("http/1.1");
HTTPSPDYServerConnectionFactory spdy = new HTTPSPDYServerConnectionFactory(SPDY.V3, httpConfig);
HttpConnectionFactory http = new HttpConnectionFactory(httpConfig);

Server server = new Server();
ServerConnector connector = new ServerConnector(server, new ConnectionFactory[]{ssl, alpn, spdy, http});

server.start();

これをhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=440756として追跡しました。

最後に、コードを直接使用するのではなく、Jetty をサーバーとして使用し、それに Web アプリケーションをデプロイする場合、Jetty はアクティブ化されたモジュールに応じて ALPN または NPN のいずれかを適切に構成します。

于 2014-07-30T12:12:26.090 に答える