2012-10-02 45 views
7

我試圖通過SPDY服務器爲Jetty設置一個最小HTTP,用於測試目的。我工作的這段代碼:SPDY帶有Jetty的「Hello服務器」

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 

當我指出谷歌瀏覽器(啓用SPDY),以https://localhost:8443它警告我關於不受信任的證書,然後負載永遠

純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的人可能會發現以下有用的東西。

的JAR npn-boot-7.6.2.v20120308.jar必須(也)被放置在:

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

注意,因爲爲了事項,該條目必須出現以前JRE System Library

回答

6

在啓動時,您是否使用npn-boot作爲bootclasspath jar?

股票jvm將不支持npn(下一個協議協商),spdy將無法工作,因此您必須確保npn-boot jar與-Xbootclasspath選項一起使用。有點聽起來像你的問題,因爲你處理證書加載,然後拖延......你也指npn-boot作爲依賴關係,當它更多的是替代jvm類,然後是一個典型的依賴關係。

+0

哦,我只是把所有的JAR扔在Eclipse的課程路徑中......非常感謝! – cYrus