最近、Spring WebSocketを学習するとき、私はSpringの例に従ってコードを作成しました。ブラウザは実行時に404エラーを報告しました。
'ws:// localhost/websocket/marco'へのwebsocket接続 '失敗:websocketハンドシェイク:予期しない応答コード:404
春の手順に従ってください。
まず、AbstractWebsockethandlerを継承し、次の3つの方法を過負荷にします。
-HandleTextMessageはテキストタイプメッセージを処理します
- 新しい接続が確立された後に呼び出されたAfterConnectionSectionSibled
- 接続が閉じた後、afterconnectionclosedコール
Import org.springframework.web.socket.closestatus; Import org.springframework.web.socket.textmessage; Import org.springframework.web.socket.websocketsessess; Import org.springframework.web.web.socket.handler保護されたvoid handletextmessage(websocketsession session、textmessage message)スロー例外{system.out.println( "received message:" + message.getPayload()); Thread.Sleep(2000); session.sendmessage(new TextMessage( "polo!")); } @Override public void afterconnectioneStabledished(websocketsession session){system.out.println( "Connection stavesting!"); } @Override public void afterconnectionclosed(websocketsession session、cordestatus status){system.out.println( "Connectionclosht。Status:" + status); }}第二に、javaconfigを使用してWebSocketおよびMAPメッセージプロセッサを有効にします
org.springframework.context.annotation.bean; Import org.springframework.web.socket.config.annotation.enablewebsocket; import org.springframework.web.socket.config.annotation.websocketconfigurer;インポート; org.springframework.web.socket.config.annotation.websockethandlerregistry; @enablewebsocketpublic class websocketConfigurer {@Override public void regoltWebsockEthandlers(websockethandlerregistry registry){registry.addhandler(marcohandler( "/marco) } @bean public marcohandler marcohandler(){return new marcohandler(); }}最後に、接続要求とその後のメッセージインタラクションを開始するフロントエンドJSコードを書きます
var url = 'ws://' + windocy.location.host + '/websocket/marco'; var sock = new websocket(url); sock.onopen = function(){console.log( 'opening'); sock.send( 'marco!');}; sock.onmessage = function(e){console.log( '受信メッセージ:'、e.data); setimeout(function(){saymarco()}、2000);}; sock.onclose = function(){console.log( 'closis');}; function saymarco(){console.log( 'marco!'の送信); sock.send( 'marco!');}展開後、ブラウザを開いて実行し、404エラーを直接報告します
Stackoverflow.comでの経験を含む夜のソリューションをインターネットで検索すると、次の記事を見るまで問題は解決しませんでした。
Spring Integrated WebSocket Page Access 404問題へのソリューション
後で忘れないように、ここでレコードを作成しましょう。
WebSocketは基本的にHTTPリクエストを握手します。 Spring WebSocketを有効にするには、org.springframework.web.servlet.dispatcherservletでこのリクエストの傍受を構成する必要があります。
これが解決策です:
まず、WebSocketConfigクラスの定義を変更し、@Configurationアノテーションをクラスに追加します。クラスは、JavaconFig(XML構成の<Beans>要素に相当)の形式のBean定義のソースとして使用されていることを示します。
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.socket.config.annotation.EnableWebSocket;import org.springframework.web.socket.config.annotation.WebSocketConfigurer;import org.springframework.web.socket.config.annotation.websockethandlerregistry;@configuration@enablewebsocketpublic class websocketconfigは、weboverride public void registerwebsockethandlers(websockethandlerregistry registry)を実装しています。 } @bean public marcohandler marcohandler(){return new marcohandler(); }}第二に、javaconfigを使用して、Dispatcherservletを構成し、org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializerを継承し、次の3つの方法を過負荷にします。
-GetRootConfigClasses @Configurationアノテーションでクラスを返して、ContextLoaderListenerによって作成されたアプリケーションコンテキストで豆を構成する
-GetServletConfigClasses @Configuration Annotationでクラスを返して、DispatcherServletアプリケーションのコンテキストでBeanを定義します
-GetServletMappings DispatcherServletへの1つ以上のパスをマップします
実際、発効するためにSpring Websocketのみが必要な場合は、DispatcherServletアプリケーションのコンテキストを定義するGetServletConfigClassesメソッドのBeanを返すだけです。
Import org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializer; public class websocketinitializerは、AbstractAnnotationConfigdiserervletinitializerを拡張します{@Override Protected Class <? } @Override Protected Class <? } @Override Protected String [] getServletMappings(){return new String [] {"/"}; }}子孫を再配置し、ブラウザを正常に開きます
クライアントメッセージ
サーバーメッセージ
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。