5

標準の GWT StockWatcherデモ アプリを変更して、websocket 経由で株価を受信しようとしています。Websockets の実装としてgwt-wsを使用しています。gwt-ws ホームページの指示に従って、GWT の組み込みバージョンの Jetty をアップグレードしました。

ただし、websocket 接続を開こうとすると、次の 405 エラーが発生します。誰かアドバイスはありますか?

[WARN] 405 - GET /stockwatcher/webSocket (127.0.0.1) 1457 bytes
   Request headers
      Upgrade: websocket
      Connection: Upgrade
      Host: 127.0.0.1:8888
      Origin: http://127.0.0.1:8888
      Sec-WebSocket-Key: zlH08kgvDw3qHs+/OaQ9/w==
      Sec-WebSocket-Version: 13
      Sec-WebSocket-Extensions: x-webkit-deflate-frame
   Response headers
      Content-Type: text/html;charset=ISO-8859-1
      Cache-Control: must-revalidate,no-cache,no-store
      Content-Length: 1457

onModuleLoad() から呼び出されるクライアント側の websocket コードは次のとおりです。

private void setupWebsocket() {
    if (!JavaScriptWebSocket.IsSupported())
        return;

    //webSocketURL looks like "ws://127.0.0.1:8888/de_csenk_gwtws_demo/webSocket"
    String webSocketURL = GWT.getModuleBaseURL().replace("http", "ws") + "webSocket";

    new JavaScriptWebSocketFactory().createWebSocket(webSocketURL, new WebSocketCallback() {

        public void onOpen(WebSocket webSocket) {
            log("Web Socket Connection Open");
            webSocket.send("Test Message");
        }

        public void onMessage(WebSocket webSocket, String message) {
            log("Web Socket Connection Message: " + message);
        }

        public void onError(WebSocket webSocket) {
            log("Web Socket Connection Error");
        }

        public void onClose(WebSocket webSocket) {
            log("Web Socket Connection Closed");
        }
    });
}

Web ページに「Web Socket 接続が閉じられました」というログが記録されています。

ここに私のサーブレットがあります:

package com.google.gwt.sample.stockwatcher.StockWatcher.server;

import javax.servlet.http.HttpServletRequest;

import org.eclipse.jetty.websocket.WebSocket;

import de.csenk.gwt.ws.server.jetty.JettyWebSocketConnection;
import de.csenk.gwt.ws.shared.Connection;
import de.csenk.gwt.ws.shared.Handler;

public class MyWebSocketServlet extends org.eclipse.jetty.websocket.WebSocketServlet {

    public static final long serialVersionUID = 1;

    protected WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
        return new JettyWebSocketConnection(new Handler() {
            public void onConnectionOpened(Connection connection) throws Throwable {
                System.out.println("Connection opened server side");
            }

            public void onConnectionClosed(Connection connection) throws Throwable {
                System.out.println("Connection closed server side");
            }

            public void onExceptionCaught(Connection connection, Throwable caught) {
                System.out.println("exception caught server side");
                caught.printStackTrace(System.out);
            }

            public void onMessageReceived(Connection connection, Object message) throws Throwable {
                System.out.println("Message Received! " + message);
            }
        });
    }
}

ここに StockWatcher.gwt.xml があります

<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='stockwatcher'>
  <!-- Inherit the core Web Toolkit stuff.                        -->
  <inherits name='com.google.gwt.user.User'/>

  <!-- Inherit the default GWT style sheet.  You can change       -->
  <!-- the theme of your GWT application by uncommenting          -->
  <!-- any one of the following lines.                            -->
  <!-- <inherits name='com.google.gwt.user.theme.clean.Clean'/>   -->
  <inherits name='com.google.gwt.user.theme.standard.Standard'/>
  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->

  <!-- Other module inherits                                      -->
  <inherits name='de.csenk.gwt.ws.WebSocket'/>

  <!-- Specify the app entry point class.                         -->
  <entry-point class='com.google.gwt.sample.stockwatcher.StockWatcher.client.StockWatcher'/>

  <!-- Specify the paths for translatable code                    -->
  <source path='client'/>
  <source path='shared'/>


</module>

ここにweb.xmlがあります

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee">

  <!-- Servlets -->
  <servlet>
   <servlet-name>webSocket</servlet-name>
   <servlet-class>com.google.gwt.sample.stockwatcher.StockWatcher.server.MyWebSocketServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>webSocket</servlet-name>
    <url-pattern>/stockwatcher/webSocket</url-pattern>
  </servlet-mapping>

  <!-- Default page to serve -->
  <welcome-file-list>
    <welcome-file>StockWatcher.html</welcome-file>
  </welcome-file-list>

</web-app>
4

0 に答える 0