我正在尝试使用Jetty在SPDY服务器上设置最小HTTP,以进行测试。我正在研究这段代码:
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
之前显示。
答案 0 :(得分:6)
启动时你是否正在使用npn-boot作为bootclasspath jar?
股票jvm将不支持npn(下一个协议协商)并且spdy将不起作用,因此您必须确保npn-boot jar与-Xbootclasspath选项一起使用。自从你处理证书加载然后它停止时,有点听起来像你的问题...当你更多地取代jvm类然后是典型的依赖时,你也将npn-boot称为依赖。