0
Client Code: 
$scope.socket = new SockJS("ws/ws"); 
$scope.stompClient = Stomp.over($scope.socket); 
$scope.stompClient.connect("guest", "guest",connectCallback, errorCallback); 

//in connectCallback 
$scope.stompClient.subscribe('/topic/agent-sendstatus', showScreenPop); 

Java Code: 
    @MessageMapping("/agent-sendstatus") 
     public void testmethod() 
     { 
      //How do i get ServletContext here to further implement solution? 
      template.convertAndSend("/topic/agent-sendstatus","bcd"); 
     } 

제안하십시오. 컨트롤러에서 SimpMessageHeaderAccessor를 사용하여 세션을 가져오고 있지만 ServletContext도 필요합니다. 봄에 어떤 방법이 있습니까?웹 소켓을 사용할 때 스프링 컨트롤러에서 ServletContext를 얻을 수 없습니다.

+0

정말 컨텍스트에서 무엇을 기대합니까? – Rafa

+0

글쎄, 난 컨텍스트에서 모든 속성이 필요합니다. – abcd

+0

당신의 대답은 이미 분명했습니다. 정확히 무엇이 필요합니까? sergi의 대답은 사실입니다. 웹 소켓에서는 시작시에만 (핸드 셰이크에서) HTTP가 있고 모든 추가 통신은 소켓을 통과합니다. 어쩌면 필요한 정보를 얻을 수있는 또 다른 방법이 있습니다 (필요한 정보를 알고 있다고 생각할 때) – Rafa

답변

1

WebSocket으로 업그레이드 할 때 통신에 관련된 HTTP가 없습니다. HTTP가 핸드 쉐이크 중에있는 유일한 곳입니다. HandshakeInterceptor을 구현하여 ServletContext를 가져오고 WebSocket 세션에 매개 변수를 노출 할 수 있으므로 HeaderAccessor를 사용하여 메시지 핸들러 메서드에서 매개 변수를 가져올 수 있습니다. 예를 들어 HttpSessionHandshakeInterceptor을 확인하십시오.

관련 문제