【问题标题】:Jetty WebSocket码头 WebSocket
【发布时间】:2013-08-30 20:40:36
【问题描述】:

我对码头 8.1.10.v20130312 和 WebSocket 有疑问。代码如下:

web.xml

<listener>
    <listener-class>ru.websocket.StartupListener</listener-class>
</listener>

StartupListener.java

public class StartupListener implements ServletContextListener {

public void contextDestroyed(ServletContextEvent arg0) {

}

public void contextInitialized(ServletContextEvent arg0) {
    Server server = new Server(8081);
    EventHandler handler = new EventHandler();
    server.setHandler(handler);
    try {
        server.start();
        System.out.println("Server started");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

EventHandler.java

public class EventHandler extends WebSocketHandler {

public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
     return new EventWebSocket();
}

}

EventWebSocket.java

public class EventWebSocket implements WebSocket {

public void onClose(int arg0, String arg1) {
    System.out.println("closed");
}

public void onOpen(Connection arg0) {
    System.out.println("opened");
}

}

当我想从 javascript 连接时,我收到一条错误消息

2013-07-15 18:02:02.433:WARN:oejs.AbstractHttpConnection:/
java.lang.NullPointerException
        at org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:238)
        at org.eclipse.jetty.websocket.WebSocketFactory.acceptWebSocket(WebSocketFactory.java:396)
        at org.eclipse.jetty.websocket.WebSocketHandler.handle(WebSocketHandler.java:43)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
        at org.eclipse.jetty.server.Server.handle(Server.java:368)
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
        at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
        at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
        at java.lang.Thread.run(Thread.java:662)

关于构建,我使用 maven,java 版本 1.6.31,jetty 版本 8.1.10.v20130312。 重要 我想在端口 8080 (StartupListener) 上使用端口 8081 从 Jetty 启动新的 Jetty 服务器。

感谢您的回答。

【问题讨论】:

  • 在 Jetty 的 osgi 框架内使用 Websockets 作为 servlet 容器时也会发生异常。由于类 HttpConnection 被加载了两次,osgi 框架的静态 HttpConnection-ThreadLocal 是空的。为了解决这个问题,首先公开 WebAppContext 的必要库(参见wiki.eclipse.org/Jetty/Reference/Jetty_Classloading),然后将它们导出到 osgi 框架(例如通过 equinox extensionbundle)。

标签: java nullpointerexception websocket jetty


【解决方案1】:

org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:238) 上的 java.lang.NullPointerException 表示您要么 ...

  • 尝试使用来自非 Jetty 服务器(例如 Tomcat)的 Jetty WebSocket 代码。
  • 或者您尝试从非 HTTP 连接(例如 SPDY)升级。

这是因为在 WebSocket 握手的升级过程中找不到核心 HTTP 连接,这是该 Jetty WebSocket 服务器代码正常运行的要求。

【讨论】:

  • 我不使用任何其他服务器,只使用 Jetty。
【解决方案2】:

您是否使用 RunjettyRun eclipse 插件来运行您的网络应用程序?

如果是,请检查“运行配置”,

将“Select a Jetty Version”下拉列表框设置为 Jetty 8,例如“Jetty 8.1.2.v20120308”

您只能在 Jetty 8 或更高版本上运行 websocket 网络应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多