2014-10-08 3 views
0

Как конфиг весна-WebSocket с 'WebApplicationInitializer':Как конфиг весна-WebSocket с 'WebApplicationInitializer'

WebAppInitializer.java

public class WebAppInitializer implements WebApplicationInitializer { 

@Override 
public void onStartup(ServletContext servletContext)throws ServletException { 

    AnnotationConfigWebApplicationContext SpringWebSocketContext = new AnnotationConfigWebApplicationContext(); 
    SpringWebSocketContext.register(WebSocketConfig.class); 
} 

}

WebSocketConfig. java

@Configuration 
@EnableWebSocketMessageBroker 
@ComponentScan({ "service" }) 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/hello").withSockJS(); 
    } 

} 

GreetingController.java

@Controller 
public class GreetingController { 
    @MessageMapping("/hello") 
    @SendTo("/topic/greetings") 
    public Greeting greeting(HelloMessage message) throws Exception { 
     Thread.sleep(3000); // simulated delay 
     return new Greeting("Hello, " + message.getName() + "!"); 
    } 

} 

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>Hello WebSocket</title> 
    <script src="lib/sockjs/sockjs.min.js"></script> 
    <script src="lib/sockjs/stomp.js"></script> 
    <script type="text/javascript"> 
     var stompClient = null; 

     function setConnected(connected) { 
      document.getElementById('connect').disabled = connected; 
      document.getElementById('disconnect').disabled = !connected; 
      document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden'; 
      document.getElementById('response').innerHTML = ''; 
     } 

     function connect() { 
      var socket = new SockJS('/hello'); 
      stompClient = Stomp.over(socket); 
      stompClient.connect({}, function(frame) { 
       setConnected(true); 
       console.log('Connected: ' + frame); 
       stompClient.subscribe('/topic/greetings', function(greeting){ 
        showGreeting(JSON.parse(greeting.body).content); 
       }); 
      }); 
     } 

     function disconnect() { 
      stompClient.disconnect(); 
      setConnected(false); 
      console.log("Disconnected"); 
     } 

     function sendName() { 
      var name = document.getElementById('name').value; 
      stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name })); 
     } 

     function showGreeting(message) { 
      var response = document.getElementById('response'); 
      var p = document.createElement('p'); 
      p.style.wordWrap = 'break-word'; 
      p.appendChild(document.createTextNode(message)); 
      response.appendChild(p); 
     } 
    </script> 
</head> 
<body> 
<noscript><h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websocket relies on Javascript being enabled. Please enable 
    Javascript and reload this page!</h2></noscript> 
<div> 
    <div> 
     <button id="connect" onclick="connect();">Connect</button> 
     <button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button> 
    </div> 
    <div id="conversationDiv"> 
     <label>What is your name?</label><input type="text" id="name" /> 
     <button id="sendName" onclick="sendName();">Send</button> 
     <p id="response"></p> 
    </div> 
</div> 
</body> 
</html> 

, когда я запускаю его, произошла ошибка в консоли браузера.

Opening Web Socket... stomp.js:145 
GET http://127.0.0.1:8080/hello/info 404 (Not Found)   sockjs.min.js:27 
Whoops! Lost connection to undefined        stomp.js:145 

ответ

0

Проблема в том, где вы создаете сокет.

вы должны указать contextRoot вашего проекта

var socket = new SockJS('{contextRoot}/hello');

Смежные вопросы