stomp 连接错误: Whoops! Lost connection to http://localhost:8080/spring13/stomp 的解决方法

【0】README

1)本文旨在给出 stomp 连接错误: Whoops! Lost connection to http://localhost:8080/spring13/stomp 的解决方法;you can also refer to this link http://stackoverflow.com/questions/29247956/whoops-lost-connection-to-undefined-connection-lost-just-after-the-connection.

2)解决问题后,文末给出了 STOMP client 的配置 和 springmvc 支持STOMP 的配置 ;


【1】错误 和 解决方法

1)error info


2)solution: 添加 jackson 的jar 包 到spring 项目中 即可。




【2】STOMP client 和 STOMP server(springmvc 配置以支持STOMP)

【2.1】STOMP client(websockjs.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf"%><html lang="zh-CN">
<head><title>Hello WebSocket</title><script src="<c:url value="/resources/sockjs-1.1.1.js" />"></script><script src="<c:url value="/resources/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 url = "<c:url value='/stomp' />";  var sock = new SockJS(url); // 创建 SockJS 连接;SockJS 可以接收相对url;  var stomp = Stomp.over(sock); // 创建 STOMP 客户端,显然,它们是一层一层封装的.  var payload = JSON.stringify({ 'name': 'tangrong' });  stomp.connect({}, function(frame) { // 连接 STOMP 端点;setConnected(true);console.log('Connected: ' + frame);stomp.subscribe('/topic/response', function(calResult){showResult(JSON.parse(calResult.body).content);});});  }function disconnect() {if (stompClient != null) {stompClient.disconnect();}setConnected(false);console.log("Disconnected");}function sendName() {var name = document.getElementById('name').value;stompClient.send("/app/stomp", {}, 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 οnlοad="disconnect()">
<noscript><h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websocket relies on Javascript being enabled. Please enableJavascript and reload this page!</h2>
</noscript>
<div><div><button id="connect" οnclick="connect();">Connect</button><button id="disconnect" disabled="disabled" οnclick="disconnect();">Disconnect</button></div><div id="conversationDiv"><label>What is your name?</label><input type="text" id="name" /><button id="sendName" οnclick="sendName();">Send</button><p id="response"></p></div>
</div>
</body>
</html>

【2.2】STOMP server(springmvc 配置以支持STOMP)

1)WebConfig.java

package com.spring.spittr.web;import java.io.IOException;import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;@Configuration
@ComponentScan(basePackages = { "com.spring.spittr.web" })
@EnableWebMvc
@Import({WebSocketConfig.class}) // 引入 WebSocketConfig 的配置,下面声明了。
public class WebConfig extends WebMvcConfigurerAdapter {@Beanpublic TilesConfigurer tilesConfigurer() {TilesConfigurer tiles = new TilesConfigurer();tiles.setDefinitions(new String[] { "/WEB-INF/layout/tiles.xml" });tiles.setCheckRefresh(true);return tiles;}// config processing for static resources.@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}// InternalResourceViewResolver @Beanpublic ViewResolver viewResolver1() {TilesViewResolver resolver = new TilesViewResolver();return resolver;}@Beanpublic ViewResolver viewResolver2() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views/");resolver.setSuffix(".jsp");resolver.setExposeContextBeansAsAttributes(true);resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);return resolver;}@Beanpublic MessageSource messageSource() {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();messageSource.setBasename("messages"); return messageSource;}@Beanpublic MultipartResolver multipartResolver() throws IOException {CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();multipartResolver.setUploadTempDir(new FileSystemResource("/WEB-INF/tmp/spittr/uploads"));multipartResolver.setMaxUploadSize(2097152);multipartResolver.setMaxInMemorySize(0);return multipartResolver;}
}

2)WebSocketConfig.java

package com.spring.spittr.web;import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.handler.annotation.MessageMapping;
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;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableSimpleBroker("/topic", "/queue");config.setApplicationDestinationPrefixes("/app");// 应用程序以 /app 为前缀,而 代理目的地以 /topic 为前缀.// js.url = "/spring13/app/hello" -> @MessageMapping("/hello") 注释的方法.}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/stomp").withSockJS();// 在网页上我们就可以通过这个链接 /server/app/hello 来和服务器的WebSocket连接}
}

3)GreetingController.java

package com.spring.spittr.web;import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;import com.spring.pojo.Greeting;
import com.spring.pojo.HelloMessage;@Controller
public class GreetingController {@MessageMapping("/stomp")@SendTo("/topic/response")public Greeting greeting(HelloMessage message) throws Exception {System.out.println("receiving " + message);System.out.println("connecting successfully.");return new Greeting("Hello, " + message.getName() + "!");}
}

4)SpitterWebInitializer.java

package com.spring.spittr.config;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import com.spring.spittr.web.WebConfig;
import com.spring.spittr.web.WebSocketConfig;public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[] { RootConfig.class };}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class<?>[] { WebConfig.class };}@Overrideprotected String[] getServletMappings() {return new String[] { "/", "*.js", "*.css", "*.jpg", "*.png", "/app/*", "*.map" };} // 特别注意,这里配置不拦截的url。特别是 "/app/*"
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring面试题(70道,史上最全)

转载自 Spring面试题&#xff08;70道&#xff0c;史上最全&#xff09;1.什么是spring?2.使用Spring框架的好处是什么&#xff1f;3.Spring由哪些模块组成?4.核心容器&#xff08;应用上下文)模块。5.BeanFactory–BeanFactory实现举例。6.XMLBeanFactory7.解释AOP模块8.解释…

纯干货,Spring-data-jpa详解,全方位介绍。

http://www.cnblogs.com/dreamroute/p/5173896.html

springmvc(18)使用WebSocket 和 STOMP 实现消息功能

【0】README1&#xff09;本文旨在 介绍如何 利用 WebSocket 和 STOMP 实现消息功能&#xff1b;2&#xff09;要知道&#xff0c; WebSocket 是发送和接收消息的 底层API&#xff0c;而SockJS 是在 WebSocket 之上的 API&#xff1b;最后 STOMP&#xff08;面向消息的简单文本…

分享一套高级Java笔试题(实拍高清图)

转载自 分享一套高级Java笔试题(实拍高清图)下面是部分分享原图

使用工具将SQLServer转MYSQL的方法(连数据)

http://www.cnblogs.com/kissdodog/p/3929072.html

openfire client聊天消息交互和存储离线(在线)消息记录策略

【0】如何将离线消息存档&#xff0c;且在接收者上线之后&#xff0c;推送消息到接收者发送方发送消息 -> 检测接收方是否在线 -> -> y -> 发送在线消息 -> 发送成功后&#xff0c;存档到消息记录&#xff1b; -> n -> 修改数据包&#xff08;XML流&#…

Spring boot 入门篇

http://www.cnblogs.com/ityouknow/p/5662753.html

通往大神之路,百度Java面试题前200页。

转载自 通往大神之路&#xff0c;百度Java面试题前200页。基本概念 操作系统中 heap 和 stack 的区别什么是基于注解的切面实现什么是 对象/关系 映射集成模块什么是 Java 的反射机制什么是 ACIDBS与CS的联系与区别Cookie 和 Session的区别fail-fast 与 fail-safe 机制有什么区…

springmvc(17)异步消息简介(部分)

【0】README1&#xff09;本文旨在 intro 异步消息的 相关基础知识&#xff1b;【1】intro【1.1】发送消息1&#xff09;intro&#xff1a;间接性是异步消息的关键所在&#xff1b;2&#xff09;当一个应用向另一个应用发送消息时&#xff0c;两个应用之间没有直接的联系。相反…

搭建一个简单的Spring boot+maven项目

http://www.cnblogs.com/suncj/p/4065589.html

去BAT面试完的Mysql面试题总结(55道)

转载自 去BAT面试完的Mysql面试题总结&#xff08;55道&#xff0c;带完整答案&#xff09;55道互联网大公司的经典面试题&#xff0c;全部答对月薪5W没问题。1、一张表里面有ID自增主键&#xff0c;当insert了17条记录之后&#xff0c;删除了第15,16,17条记录&#xff0c;再把…

js解析json数组+java对象转json字符串

function checkoutUserlist(){ // js 解析json数组var statuslist [{"isAvailabe":"1","name":"pacoson"},{"isAvailabe":"0","name":"tangtang"},{"isAvailabe":"0",&…

【双11劲爆干货】阿里高级Java面试题(首发,70道)

转载自 【双11劲爆干货】阿里高级Java面试题&#xff08;首发&#xff0c;70道&#xff0c;带详细答案&#xff09; 整理的70道阿里的Java面试题&#xff0c;都来挑战一下&#xff0c;看看自己有多厉害。下面题目都带超详细的解答&#xff0c;详情见底部。 1、java事件机制包括…

系统项目源码

http://blog.sina.com.cn/s/blog_4b5bc011010114zu.html

http长/短轮询和WebSocket 的介绍和比较

【1】http协议介绍1&#xff09;介绍&#xff1a;http协议是请求/响应范式的&#xff0c;每个http 响应都对应一个 http 请求&#xff0c;http协议是无状态的&#xff0c;多个http请求之间是没有关系的&#xff1b;2&#xff09;http协议的被动性&#xff1a;在标准的HTTP请求响…

分享一套阿里高级Java面试题,要去阿里的先过这些题。

转载自 分享一套阿里高级Java面试题&#xff0c;要去阿里的先过这些题。

从零开始学spring-boot(2)-集成spring-data-jpa

http://blog.csdn.net/u013257425/article/details/52970820

基于openfire源码开发插件

【0】README1&#xff09;本文旨在 简述如何 基于openfire源码开发插件&#xff0c; 如何导入 openfire源码到 eclipse&#xff0c;参见 http://blog.csdn.net/pacosonswjtu/article/details/518716222&#xff09;also , you can checkout source code of the plugin from h…

分享18道Java基础面试笔试题

转载自 分享18道Java基础面试笔试题&#xff08;面试实拍&#xff09; 1.你最常上的两个技术站和最常使用的两个app分別进什么&#xff1f;主要解决你什么需求&#xff1f; 2.请简述http协议中get请求和post请求的区别. 3.请简述session和cookie的区別. 4.简述Servlet与JSP的关…