2013-07-15 63 views
1

我對jetty 8.1.10.v20130312和WebSocket有疑問。下面是代碼:Jetty 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版31年6月1日,碼頭8.1版本。 10.v20130312。 重要 我想在端口8080(StartupListener)上從Jetty啓動帶端口8081的新Jetty服務器。

感謝您的回答。

+0

當在Jetty的osgi框架中使用Websockets作爲servlet容器時,也會發生異常。由於類HttpConnection被加載了兩次,所以osgi框架的靜態HttpConnection-ThreadLocal是空的。爲了解決這個問題,首先暴露WebAppContext的必要庫(參見http://wiki.eclipse.org/Jetty/Reference/Jetty_Classloading),然後將它們導出到osgi框架(例如通過equinox extensionbundle)。 – sreg

回答

2

java.lang.NullPointerExceptionorg.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:238)意味着你要麼...

  • 試圖從非Jetty服務器(例如Tomcat)使用碼頭的WebSocket代碼。
  • 或者您試圖從非HTTP連接(例如SPDY)升級。

這是因爲芯HTTP連接不能在WebSocket的握手,這對於碼頭WebSocket的服務器代碼的功能的要求的升級過程中找到。

+0

我不使用任何其他服務器,只有Jetty。 – VIQ

1

您是否使用RunjettyRun eclipse插件來運行您的Web應用程序?

如果是這樣,勾選「運行配置」,

設置「選擇碼頭版本」下拉列表框中碼頭8,例如「碼頭8.1.2.v20120308」

您只能在Jetty 8或更高版本上運行websocket web應用程序。

相關問題