我想打开一个带有“webapp / socket.do”路径的websocket端口。当我使用SockJS并尝试通过代码启动呼叫时
var socket = new SockJS('/webapp/socket.do');
stompClient = Stomp.over(socket);
stompClient.connect({}, ...
默认情况下,SockJS会在给定路径的末尾添加“/ info”。我想知道为什么?这可以改变或预防吗?
当它与Spring MVC一起使用并且具有到< url-pattern >*.do</url-pattern>
之类的DispatcherServlet的url模式映射时,这将返回404错误。由于sockJS将“/ info”字符串添加到给定的URL,它被阻止。
Spring web.xml servlet映射代码:
<servlet-mapping>
<servlet-name>dispatch-servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
有没有人知道sockJS在那里尝试了什么?为什么?
答案 0 :(得分:5)
这是SockJS协议的一部分,也是强制性的。 此端点由服务器实现,并传达服务器功能,例如支持的协议。请参阅relevant part of the SockJS protocol。
在这种情况下,我猜你需要调整你的servlet映射不仅适用于这个端点,还需要调整其他可能出现的请求:HTTP UPGRADE对websocket的请求,以及HTTP-based transports supported by SockJS的所有其他请求。