【问题标题】:Unable to get ServletContext in Spring Controller when using Websockets使用 Websockets 时无法在 Spring Controller 中获取 ServletContext
【发布时间】:2014-09-25 05:43:08
【问题描述】:
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。 春天有什么办法吗?

【问题讨论】:

  • 您对上下文的真正期望是什么?
  • 嗯,我需要上下文中的所有属性。
  • 你的答案对我来说已经很清楚了,但你到底需要什么? sergi 的回答是正确的。在 websockets 中,只有一开始(在握手中)才有 HTTP,所有进一步的通信都通过一个套接字进行。也许还有另一种方式来获取你需要的信息(考虑到你知道你需要的信息)

标签: websocket sockjs spring-websocket servletcontextlistener


【解决方案1】:

当您升级到 WebSocket 时,通信中不涉及 HTTP,您拥有 HTTP 的唯一地方是在握手期间。您可以实现 HandshakeInterceptor 来获取 ServletContext 并将任何参数公开给 WebSocket 会话,因此您可以使用 HeaderAccessor 在消息处理程序方法中获取它们。以HttpSessionHandshakeInterceptor 为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2014-02-24
    相关资源
    最近更新 更多