2014-09-29 105 views

回答

1

Tomcat使用过滤器查找启动WebSocket连接的HTTP升级请求,并将其传递给适当的处理程序(如果它看到一个连接)。

使用ServletContainerInitializer配置过滤器。过滤器的位置取决于Web应用程序配置了哪些其他过滤器,以及Web应用程序将它们放置在FilterChain中的位置。例如,Web应用程序可能希望在Web Socket过滤器之前放置一个安全过滤器,Tomcat允许这样做。

+0

请注意,这是'javax.websocket'规范未定义的行为。这是一个针对该特定规范的开放式bug - 请参阅[WEBSOCKET_SPEC-188](https://java.net/jira/browse/WEBSOCKET_SPEC-188) – 2014-10-02 14:14:25

+0

@MarkThomas:您如何检查请求以确定它是否是websocket请求或HTTP请求? – ThreaT 2015-05-01 13:30:55

+0

Tomcat将查找WebSocket规范中定义的HTTP升级头和注册端点的匹配URI。如果两者都被找到,那么请求被传递给WebSocket,否则过滤器会将它传递给链中的下一个Filter。 – 2015-05-12 23:15:55

0

的WebSockets是一个完全不同的协议。它们不是由过滤器或servlet处理,而是由EndPoint处理。要创建它们用于扩展端点类,但与Java EE中的其他所有内容一样,现在可以使用注释。欲了解更多信息,请查看最新文档Java API for WebSockets

要在客户端创建它们,请求会以HTTP(也许是JavaScript)启动,但在Tomcat上,端点正在监听,而不是您正常的servlet。

+0

这是正确的!但Tomcat必须找到处理websocket升级请求的方法。我想知道Tomcat如何处理升级请求?例如,jetty在前端有一个ws升级过滤器,只要请求点击过滤器就会升级过滤器。 – 2014-09-30 06:45:00

+0

我检查了源代码,并明白“org/apache/tomcat/websocket/server/WsFilter.java”处理websocket的升级。请让我知道我的理解是否正确?这个过滤器是否会成为第一个被调用的过滤器,以及由tomcat指定的其他过滤器的顺序? – 2014-09-30 11:26:09