7

テスト目的で、Jettyを使用して最小限のHTTPoverSPDYサーバーをセットアップしようとしています。私はこのコードに取り組んでいます:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.spdy.http.HTTPSPDYServerConnector;
import org.eclipse.jetty.util.ssl.SslContextFactory;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class MySPDYHelloServer {
    public static void main(String[] args) throws Exception {
        Server server = new Server();

        SslContextFactory sslFactory = new SslContextFactory();
        sslFactory.setKeyStorePath("dummy_keystore.jks");
        sslFactory.setKeyStorePassword("password");
        sslFactory.setProtocol("TLSv1");

        Connector connector = new HTTPSPDYServerConnector(sslFactory);
        connector.setPort(8443);
        server.addConnector(connector);

        server.setHandler( new AbstractHandler(){
            public void handle(String target, Request baseRequest,
                    HttpServletRequest request, HttpServletResponse response)
                    throws IOException, ServletException {
                response.setContentType("text/html;charset=utf-8");
                response.setStatus(HttpServletResponse.SC_OK);
                baseRequest.setHandled(true);
                response.getWriter().println("<h1>Hello World</h1>");
            }
        } );

        server.start();
        server.join();
    }
}

次のコマンドでキーストアを生成しました。

keytool -genkey -keystore dummy_keystore.jks

Google Chrome(SPDYが有効)をポイントするhttps://localhost:8443と、信頼できない証明書について警告が表示され、永久に読み込まれます。

純粋なSPDYクライアントサーバーの例(ここから)は機能し、単純なHTTPSサーバーも機能します。この問題は、HTTPSPDYServerConnectorクラスに関連しているようです。

これが私が使用しているJARのリストです:

jetty-all-7.6.7.v20120910.jar
npn-boot-7.6.2.v20120308.jar
servlet-api-2.5.jar
spdy-core-7.6.7.v20120910.jar
spdy-jetty-7.6.7.v20120910.jar
spdy-jetty-http-7.6.7.v20120910.jar

そして、私のJava環境に関係することについて:

$ cat /opt/jdk1.7.0_07/release 
JAVA_VERSION="1.7.0"
OS_NAME="Linux"
OS_VERSION="2.6"
OS_ARCH="i586"

ソリューションの補遺

jesse mcconnellが答えを提供しましたが、とにかくEclipseを使用している人は次のことが役立つかもしれません。

JARnpn-boot-7.6.2.v20120308.jarは(また)次の場所に配置する必要があります。

Run Configurations... -> Classpath -> Bootstrap Entries -> Add External JARs

順序が重要であるため、そのエントリはのに表示する必要があることに注意してくださいJRE System Library

4

1 に答える 1

6

これを起動するときに、npn-bootをbootclasspath jarとして使用していますか?

ストックjvmはnpn(次のプロトコルネゴシエーション)をサポートせず、spdyは機能しないため、npn-bootjarが-Xbootclasspathオプションと組み合わせて使用​​されていることを確認する必要があります。証明書のロードとその後のストールを処理しているので、ちょっと問題のように聞こえます...また、npn-bootがjvmクラスの置き換えであり、通常の依存関係である場合は、依存関係として参照します。

于 2012-10-02T11:56:23.907 に答える