2012-10-02 5 views
7

テスト用に、JettyのSPDYサーバー上に最小限のHTTPを設定しようとしています。私は、このコードに取り組んでいます:JettyのSPDY "Hello server"

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 

私はhttps://localhost:8443にGoogle Chromeを(SPDY有効)ポイントすると、それは負荷その後、信頼できない証明書について私に警告します永遠

純粋なSPDYクライアント/サーバーの例(here)が動作し、単純な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はとにかく、answerを提供Eclipseを使用している人は、次のような有用なものを見つけるかもしれない。 注文がを重要するので、そのエントリはJRE System Libraryに現れなければならないこと

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

注:

JAR npn-boot-7.6.2.v20120308.jarは(も)に配置する必要があります。

答えて

6

起動時にnpn-bootをbootclasspath jarとして使用していますか?

ストックjvmはnpn(次のプロトコルネゴシエーション)をサポートしないため、spdyは動作しません。そのため、npn-boot jarが-Xbootclasspathオプションとともに使用されていることを確認する必要があります。あなたが証明書の読み込みを処理してからストールするまでの間、あなたの問題のように聞こえます...それは、jvmクラスの代わりに典型的な依存関係になったときに、npn-bootを依存関係と呼んでいます。

+0

ああ、私はEclipseのクラスパスですべてのJARをスローしました...多くの感謝! – cYrus