SPDY “Hello server” 与 Jetty
Posted
技术标签:
【中文标题】SPDY “Hello server” 与 Jetty【英文标题】:SPDY "Hello server" with Jetty 【发布时间】:2012-09-23 06:29:15 【问题描述】:出于测试目的,我正在尝试使用Jetty 设置一个最小的 HTTP over SPDY 服务器。我正在处理这段代码:
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 客户端-服务器示例(来自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
。
【问题讨论】:
【参考方案1】:你在启动它时是否使用 npn-boot 作为 bootclasspath jar?
Stock jvm 将不支持 npn(下一个协议协商)并且 spdy 将无法工作,因此您必须确保 npn-boot jar 与 -Xbootclasspath 选项一起使用。这听起来有点像你的问题,因为你处理证书加载然后它的停滞......而且你将 npn-boot 称为依赖项,而它更多的是替代 jvm 类而不是典型的依赖项。
【讨论】:
哦,我刚刚把所有的 JAR 都扔到了 Eclipse 的类路径中……非常感谢!以上是关于SPDY “Hello server” 与 Jetty的主要内容,如果未能解决你的问题,请参考以下文章