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