【问题标题】:Jersey hides Spring framework and SockJSJersey 隐藏 Spring 框架和 SockJS
【发布时间】:2017-10-13 09:12:59
【问题描述】:

我们正在尝试使用 Spring Framework WebSocket support 公开 sockjs 端点。

这是 Jersey 管理路由的服务器端的配置:

@Configuration
@EnableWebSocket
public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/sockjs").withSockJS()
                .setStreamBytesLimit(512 * 1024)
                .setHttpMessageCacheSize(1000)
                .setDisconnectDelay(30 * 1000);
    }
}

问题是我们无法访问/sockjs,客户端代码是:

List<Transport> transports = new ArrayList<>(2);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
transports.add(new RestTemplateXhrTransport());

SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.doHandshake(new MyHandler(), "ws://localhost:8080/sockjs");

(代码来自springwebsockets tutorial)

即使/sockjs 和/root/api/server/sockjs 都无法访问,同一包中的其他资源也会配置在root/api/server 下。

【问题讨论】:

  • 泽西岛的 URL 映射是什么?
  • 在web.xml中我们配置了这个:&lt;servlet-mapping&gt;&lt;servlet-name&gt;Jersey Web Application&lt;/servlet-name&gt;&lt;url-pattern&gt;/api/*&lt;/url-pattern&gt;&lt;/servlet-mapping&gt;我们也有/root前缀作为tomcat webapp配置的一部分同一个包上面的资源定义了/server路径
  • 如果禁用泽西岛,它会起作用吗?
  • 不,这让我们了解到 spring-web 没有正确初始化以注册此端点。感谢您的帮助!
  • @Noam 你能分享对你有帮助的解决方案吗?我也面临同样的问题。

标签: java spring websocket jersey sockjs


【解决方案1】:

我知道这是一个很古老的问题,但最近我遇到了同样的问题,我花了半天时间寻找解决方案。我找到了一个,我想分享它,至少是为了我自己的未来。

问题是我的WEB-INF.xml 中只有 Jersey 的 servlet 定义。解决方案是将 Spring 的 DispatcherServlet 及其映射添加到 /* 路由。

所以基本上看起来像

<servlet>
  <servlet-name>spring</servlet-mapping>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
  <servlet-name>spring</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2012-07-21
    • 2017-07-06
    • 2015-03-21
    • 2011-06-17
    • 2011-03-11
    相关资源
    最近更新 更多