[英]Browser can't connect with spring4 websocket server
在本教程之后, 在運行於Tomcat 7.0.50下的Spring MVC 4.0.5正常工作項目中。
在啟動Tomcat的eclipse控制台(catalina日志)中,出現以下行
Mapped URL path [/websocket.ws] onto handler of type [class org.springframework.web.socket.server.support.WebSocketHttpRequestHandler]
我從firefox Web控制台收到錯誤消息“ Firefox無法連接到ws://localhost/Books/websocket.ws” [HTTP / 1.1 404找不到6ms]。
我的配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket-4.0.xsd">
<bean id="websocket" class="com.example.websocket.handler.WebsocketEndPoint" />
<websocket:handlers>
<websocket:mapping path="/websocket.ws" handler="websocket" />
<websocket:handshake-interceptors>
<bean class="com.example.websocket.HandshakeInterceptor" />
</websocket:handshake-interceptors>
</websocket:handlers>
</beans>
package com.example.websocket.handler;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
public class WebsocketEndPoint extends TextWebSocketHandler{
@Override
protected void handleTextMessage(WebSocketSession session,
TextMessage message) throws Exception{
super.handleTextMessage(session, message);
System.out.println(message.getPayload());
TextMessage returnMessage =new TextMessage(message.getPayload()+"received at server");
session.sendMessage(returnMessage);
}
}
package com.example.websocket;
import java.util.Map;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor{
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response,WebSocketHandler wsHandler,
Map<String,Object> attributes) throws Exception{
System.out.println("Before Handshake!");
return super.beforeHandshake(request,response,wsHandler,attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response,WebSocketHandler wsHandler,
Exception ex){
System.out.println("After HandShake!");
super.afterHandshake(request,response,wsHandler,ex);
}
}
JavaScript代碼:
Chat.socket = new WebSocket('ws://127.0.0.1:80/Books/websocket.ws');
web.xml錯誤嗎?
“書籍”是我在tomcat中的項目名稱。
感謝您的回答。
我沒有使用Spring websocket。 但我發現您的網址似乎有誤。 書從哪里來? Firefox希望連接“ ws://localhost/Books/websocket.ws”。 但是在您的配置中,ws終結點綁定到“ /websocket.ws”。
最近我遇到了同樣的問題,我整天都在努力解決它。 最后,我意識到我需要通過DispatcherServlet而不是ContextLoaderListener來讀取websocket:handlers標記。
<servlet>
<servlet-name>Spring4Sagussoft</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/webmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring4Sagussoft</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
並進入webmvc-config.xml
<websocket:handlers>
<websocket:mapping path="/myHandler" handler="myHandler" />
</websocket:handlers>
<bean id="myHandler" class="com.laresistencia.pe.spring4.websocket.MyHandler" />
這對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.