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); // 創(chuàng)建 SockJS 連接;SockJS 可以接收相對url; var stomp = Stomp.over(sock); // 創(chuàng)建 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");// 應(yīng)用程序以 /app 為前綴,而 代理目的地以 /topic 為前綴.// js.url = "/spring13/app/hello" -> @MessageMapping("/hello") 注釋的方法.}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint("/stomp").withSockJS();// 在網(wǎng)頁上我們就可以通過這個鏈接 /server/app/hello 來和服務(wù)器的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/*" }
總結(jié)
以上是生活随笔為你收集整理的stomp 连接错误: Whoops! Lost connection to http://localhost:8080/spring13/stomp 的解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑开vt很卡(电脑开vt变卡)
- 下一篇: 鲁迅哪里人原籍是什么地方的(鲁迅先生的家