2013-02-05 39 views
3

我確實對jetty 8 websockets有一個奇怪的問題。我發現了幾個教程,幾乎表現出相同的代碼,但是當我試圖從一個本地的HTML頁面打開的WebSocket我得到這個錯誤:Jetty 8.1.9.v20130131網絡套接字問題

2013-02-05 13:14:03.467:INFO:oejs.Server:jetty-8.1.9.v20130131 
2013-02-05 13:14:03.770:INFO:oejs.AbstractConnector:Started [email protected]:8080 
2013-02-05 13:14:18.002:WARN:oejs.ServletHandler:/echo 
java.lang.NullPointerException 
    at org.eclipse.jetty.websocket.WebSocketFactory.upgrade(WebSocketFactory.java:236) 
    at org.eclipse.jetty.websocket.WebSocketFactory.acceptWebSocket(WebSocketFactory.java:382) 
    at org.eclipse.jetty.websocket.WebSocketServlet.service(WebSocketServlet.java:104) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:457) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 

這裏是插座的servlet:

public class ExampleWebSocketServlet extends WebSocketServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see WebSocketServlet#WebSocketServlet() 
    */ 
    public ExampleWebSocketServlet() { 
     super(); 
    } 



protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.println("OK"); 
     out.close(); 
     System.out.println("OK"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     getServletContext().getNamedDispatcher("default").forward(request, response); 
    } 


    public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { 
     return new EchoWebSocket(); 
    } 
} 

和WebSocket(用於簡單回聲)

public class EchoWebSocket implements WebSocket.OnTextMessage { 

    private Connection con; 

    @Override 
    public void onClose(int closeCode, String message) { 

    } 

    @Override 
    public void onOpen(Connection con) { 
     this.con = con; 

     try { 
      con.sendMessage("Server received Web Socket upgrade ..."); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onMessage(String msg) { 
     System.out.println("Received: "+msg); 

     try { 
      con.sendMessage(msg); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } //send it back 

    } 
} 

我的html頁面可以很好地與其他websocket測試服務器一起工作,例如websocket.org

什麼可能是錯的?我在Eclipse上,創建了一個動態Web項目並使用jetty webapp運行配置。此外,當碼頭啓動我可以看到,

/Users/sven.haiges/dev/jetty/jetty-distribution-8.1.9.v20130131/lib/jetty-websocket-8.1.9.v20130131.jar

位於類路徑中。

任何幫助表示讚賞,thx!

+0

分佈中的測試webapp是否在同一臺服務器計算機+ Web瀏覽器組合中爲您工作? –

+0

開始分發'java -jar start.jar'並轉到'http:// localhost:8080/ws /'並查看會發生什麼 –

回答

2

我與Run Jetty Run插件有同樣的問題。終於找到解決方案 去下碼頭標籤運行配置

  • 左側面板中選擇下碼頭web應用程序的項目名稱在右側
  • 選擇碼頭8.1版本

應用/運行 這一切

1

嘗試使用Jetty 8.1.8版本。 今天,我有一個問題,通過@WebServlet註釋創建一個簡單的servlet。碼頭服務器沒有迴應,我不明白爲什麼。但是當我突然改回8.1.8版時,一切正常。 也許這是一個類似的問題。