최근 Spring WebSocket을 학습 할 때 Spring in Spring의 예제에 따라 코드를 작성했으며 브라우저는 런타임에 404 오류를보고했습니다.
'ws : // localhost/websocket/marco'에 대한 WebSocket 연결 실패 : WebSocket 핸드 셰이크 중 오류 : 예상치 못한 응답 코드 : 404
실제로 봄의 단계를 따르십시오.
먼저 AbstractWebsockethandler를 상속하고 다음 3 가지 방법을 과부하시킵니다.
-HandleTextMessage는 텍스트 유형 메시지를 처리합니다
- 새 연결이 설정된 후 호출 된 후 AfterconnectionStablish
-ConcennectionClosed Call이 닫힌 후 호출됩니다
import org.springframework.web.socket.closestatus; import org.springframework.web.socket.textmessage; import org.sprameframework.web.socket.websocketsession; import org.spramframework.web.skets.handsocketholdler; public websocketholler; void handletextMessage (websocketSession session, textMessage Message) 예외 {system.out.println ( "수신 메시지 :" + message.getPayload ()); Thread.sleep (2000); Session.SendMessage (New TextMessage ( "Polo!")); } @override public void alftonnectionestablish (websocketSession session) {System.out.println ( "연결 설정!"); } @override public void afterconnectionClosed (websocketSession session, closeStatus status) {System.out.println ( "연결 닫기. 상태 :" + 상태); }}둘째, JavaconFig를 사용하여 WebSocket 및 MAP 메시지 프로세서를 활성화하십시오
import org.springframework.context.annotation.bean; import org.springframework.web.socket.config.annotation.enablewebsocket; import org.springframework.web.socket.config.annotation.websocketconfigurer; import org.springframework.web.socket.config.annotation.websockethandlerregistry; @enablewebsocketpublic class websocketconfigurer는 websocketconfigurer {@override public void registerwebsockethandlers (websockethandlerregistry 레지스트리) {registry.adhandller (), "/marco"); } @bean public marcohandler marcohandler () {return new Marcohandler (); }}마지막으로, 프론트 엔드 JS 코드를 작성하여 연결 요청 및 후속 메시지 상호 작용을 시작하십시오.
var url = 'ws : //' + wind sock.send ( 'marco!');}; sock.onmessage = function (e) {console.log ( '수신 메시지 :', e.data); settimeout (function () {saymarco ()}, 2000);}; sock.onclose = function () {console.log ( 'closing');}; function saymarco () {console.log ( 'sending marco!'); sock.send ( 'Marco!');}배포 후 브라우저를 열고 실행하고 404 오류를 직접보고하십시오.
stackoverflow.com의 경험을 포함하여 야간 솔루션을 인터넷 검색하면 다음 기사를 볼 때까지 문제가 해결되지 않았습니다.
스프링 통합 웹 소켓 페이지 액세스 솔루션 404 문제
나중에 잊어 버리지 않도록 여기서 기록을 만들어 봅시다.
WebSocket은 본질적으로 HTTP 요청을 핸드 셰이크를 빌립니다. Spring WebSocket을 활성화하려면 org.springframework.web.servlet.dispatcherervlet 에서이 요청의 차단을 구성해야합니다.
다음은 해결책입니다.
먼저 WebSocketConfig 클래스 정의를 수정하고 클래스에 @Configuration 주석을 추가하여 클래스가 JavaconFig 형태의 Bean 정의 소스로 사용됨을 나타냅니다 (XML 구성의 <eans> 요소와 동일).
import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.sprameframework.web.socket.config.annotation.enablewebsocket; import org.springframework.weetch.config.config.websetceet.antotation.websetocet org.springframework.web.socket.config.annotation.websockethandlerregistry;@configuration@enablewebsocketpublic class websocketconfig는 websocketconfigurer {@override public void void void registerwebsockethandlers (websockethandlerregistry registry) {registry.adhandler (); ",/co"); } @bean public marcohandler marcohandler () {return new Marcohandler (); }} 둘째, javaconfig를 사용하여 Dispatcherservlet을 구성하고 org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializer를 상속하고 다음 3 가지 방법을 과부하하십시오.
-getRootConfigClasses @Configuration 주석으로 클래스를 반환하여 ContextLoaderListener에서 생성 한 응용 프로그램 컨텍스트에서 Bean을 구성합니다.
-GetServletConfigClasses @Configuration 주석으로 클래스를 반환하여 DispatcherServlet 응용 프로그램 컨텍스트에서 Bean을 정의합니다.
-GetServletMappings 하나 이상의 경로를 DispatchersErvlet으로 매핑합니다
실제로, Spring WebSocket 만 효력을 발휘하는 경우 DispatcherServlet 응용 프로그램 컨텍스트를 정의하는 GetServletConfigClasses 메소드에서 Bean을 반환하면됩니다.
import org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializer; public class webSocketInitializer 확장 추상화 antackOntationConfigDispatcherServleTinitializer {@override protected class <? [] getRootConfigClasses () {return null; } @override protected class <?> [] getServletConfigClasses () {return new Class <?> [] {WebSocketConfig.class}; } @override Protected String [] getServletmappings () {return new String [] { "/"}; }}후손을 재배치하고 브라우저를 성공적으로 열십시오
클라이언트 메시지
서버 메시지
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.