3

jetty 8 websocket に奇妙な問題があります。ほとんど同じコードを示すいくつかのチュートリアルを見つけましたが、ローカルの HTML ページから websocket を開こうとすると、次のエラーが発生します。

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 SelectChannelConnector@0.0.0.0: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)

ソケットサーブレットは次のとおりです。

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 (単純な Echo の場合)

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.org などの他の Websocket テスト サーバーで問題なく動作します。

何が間違っている可能性がありますか?私は Eclipse を使用しており、動的 Web プロジェクトを作成し、jetty webapp 実行構成を使用しています。また、jettyが起動すると、それを見ることができます

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

クラスパスにあります。

どんな助けでも感謝します、thx!

4

2 に答える 2

2

Run Jetty Run プラグインでも同じ問題が発生しました。最終的に解決策を見つけました。実行構成に移動します

  • 左パネルの jetty webapp の下にあるプロジェクト名を選択します
  • Jetty タブの下の右側にある jetty バージョン 8.1 を選択します。

適用/実行それだけです

于 2013-02-08T15:05:47.713 に答える
1

Jetty8.1.8バージョンを使用してみてください。今日、@WebServletアノテーションを介して単純なサーブレットを作成する際に問題が発生しました。桟橋サーバーが応答せず、理由がわかりませんでした。しかし、突然バージョン8.1.8に戻したとき、すべてが正常に機能しました。多分それは同様の問題です。

于 2013-03-15T17:07:29.457 に答える