spring springmvc js websocket 監聽

第一步:web.xml中支持異步。全部的filter及servletjavascript

<filter>
    <filter-name>characterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <async-supported>true</async-supported>
  </filter>
  
  <filter-mapping>
    <filter-name>characterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 註冊中央調度器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name><!-- 隨便 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 指定springmvc配置文件位置及文件名 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-mvc.xml</param-value><!-- springmvc的配置文件,classpath表明類路徑下 -->
    </init-param>
    <!-- 寫一個>0的數字,越小優先級越高(<=0和沒有設置沒區別),代表tomcat服務器在啓動的時候,就將DispatcherServlet對象給建立了 -->
    <!-- 在tomcat啓動時,直接建立當前servlet -->
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>

第二步。pom.xml依賴java

<!-- for support web socket -->  
        <dependency>  
            <groupId>javax.websocket</groupId>  
            <artifactId>javax.websocket-api</artifactId>  
            <version>1.1</version>  
            <scope>provided</scope> <!-- 注意,scope必須爲provided,不然runtime會衝突,若是使用tomcat 8,還須要將TOMCAT_HOME/lib下的javax.websocket-api.jar一併刪除 -->  
        </dependency> 
        
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.3.3</version>
        </dependency>

第三步:web

package com.ldr.websocket;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
/**
 * 
 * @author Wang&Yang
 * @email 867986155@qq.com
 * @date 2018-05-02
 * @remark esno company
 * @version 1.0.0
 * @description:
 * 這個類表示啓用websocket消息處理,以及收發消息的域

    config.enableSimpleBroker("/queue", "/topic");這句表示在/queue", "/topic這兩個域上能夠向客戶端發消息;

    registry.addEndpoint("/endpointChat").withSockJS();客戶端在此鏈接websocket server
 */
@Configuration /*別忘記了要讓spring管理咯*/ 
@EnableWebSocketMessageBroker  
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {  
  
    @Override  
    public void configureMessageBroker(MessageBrokerRegistry config) {  
        config.enableSimpleBroker("/queue", "/topic");
    }  
  
    @Override  
    public void registerStompEndpoints(StompEndpointRegistry registry) {  
        //註冊一個名字爲"endpointChat" 的endpoint,並指定 SockJS協議。   點對點-用
        registry.addEndpoint("/endpointChat").withSockJS();  
    }  
  
}  
package com.ldr.websocket;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.ldr.base.GsonBean;

@Controller  
public class WebSocketController {  
  
    public SimpMessagingTemplate template;  
  
    @Autowired  
    public WebSocketController(SimpMessagingTemplate template) {  
        this.template = template;  
    }  
 
    
    @RequestMapping("/noticeDataGenResult")
    public void noticeDataGenResult(@RequestParam(value="fn") String fileName,@RequestParam(value="rc") String genResult/*1爲成功,0爲失敗*/) {
            Map<String,String> datas=new HashMap<String,String>(5);
            datas.put("fileName", fileName);
            datas.put("genResult", genResult);
            template.convertAndSend("/topic/getResponse", new GsonBean(200, datas));
        }
    }

 

第四步:jspspring

    <!-- websock.js -->
    <script type="text/javascript" src="../sys/js/websock/sockjs.min.js"></script>
    <script type="text/javascript" src="../sys/js/websock/stomp.min.js"></script>

$(function () {
        connect();
    });

    function connect() {
        var sock = new SockJS("../endpointChat");
        var stomp = Stomp.over(sock);
        stomp.connect('guest', 'guest', function(frame) {
            stomp.subscribe('/topic/getResponse', function (response) { //訂閱/topic/getResponse 目標發送的消息。這個是在控制器的@SendTo中定義的。
                var resultObj=$.parseJSON(response.body);
                console.dir(resultObj);
            });
        });
        
    }
相關文章
相關標籤/搜索