zoukankan      html  css  js  c++  java
  • spring springmvc js websocket 监听

    第一步:web.xml中支持异步。所有的filter及servlet

    <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依赖

    <!-- 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>

    第三步:

    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));
            }
        }

    第四步:jsp

        <!-- 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);
                });
            });
            
        }
  • 相关阅读:
    MYSQL 日志参数与性能的关系
    mybatis 中 foreach collection的三种用法
    SqlServer查找引用存储过程的地方_字段在哪些表中
    ubuntu中sudo不用输入密码配置
    matlab练习程序(罗德里格斯变换)
    matlab练习程序(多边形扩展算法)
    matlab练习程序(生成gif图片)
    python3 mac环境 生成pdf
    requests 爬取 台州市 履行中状态的合同附件
    个人支付方案(免签约)-支付宝当面付
  • 原文地址:https://www.cnblogs.com/wangyang108/p/8980582.html
Copyright © 2011-2022 走看看