如何允许websocket | sockjs path' socket.do/info'当Spring MVC url-pattern mapping是" *。do"

时间:2016-01-26 23:56:04

标签: spring spring-mvc websocket spring-websocket sockjs

我想在Spring MVC apllication中使用SockJS,STOMP打开websocket连接。我遇到的问题类似于question。但答案对我不起作用。我已经按照here的教程进行了操作。 正如所说here我的应用程序在调用webapp / socket.do映射时将404返回给浏览器。 javascript代码如下:

    socket = new SockJS('webapp/socket.do');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function(frame) {...

我在web.xml文件中的servlet映射如下:

    `<servlet-mapping>
    <servlet-name>dispatch-servlet</servlet-name>
    <url-pattern>*.do</url-pattern>
     </servlet-mapping>`

现在我尝试更改&#34; *。do&#34;的网址映射。到&#34; /&#34;使用其他资源网址模式建议here by @Gofier这个(&#34; /&#34;)使连接打开但不能正确渲染一些资源。(网页不能正确加载)。

我还有什么方法可以使用&#34; *。做&#34;并允许使用&#34; / info&#34;进行websocket连接。同时 ??请建议任何可能的方法来解决此问题。感谢。

更新 :显示控制器代码和配置文件

@Configuration 
@EnableScheduling 
@EnableWebMvc 
@ComponentScan(basePackages="com.package") 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/socket.do").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/queue/", "/topic/");
        registry.setApplicationDestinationPrefixes("/app");
    }
}

控制器代码:

 @MessageMapping("/hello")
 @SendTo("/topic/greetings")
 public Greeting greeting(HelloMessage message) throws Exception {
     Thread.sleep(3000); // simulated delay
     return new Greeting("Hello, " + message.getName() + "!");
 }

1 个答案:

答案 0 :(得分:0)

怎么样......

<servlet-mapping>
    <servlet-name>dispatch-servlet</servlet-name>
    <url-pattern>*.do</url-pattern>
    <url-pattern>/hello/*</url-pattern>
</servlet-mapping>

此?