在Tomcat中实现WebSockets的方法在版本7和版本8之间发生了变化。
Tomcat 7:
public class ChatWebSocketServlet extends WebSocketServlet { ... }
Tomcat 8:
@ServerEndpoint(value = "/chat")
public class ChatAnnotation { ... }
我想知道的是,是否可以将两个版本构建到单个应用程序中。我已经尝试了
@ServerEndpoint(value = "/chat")
public class ChatServlet extends WebSocketServlet { ... }
但它永远不会编译两者 websocket-api.jar和catalina.jar。我想可以检查一个类是否被定义并在运行时使用其中一个,但是我不确定如何准确地实现它,或者它是否是一个好主意。&lt; < / p>
我可以将websocket-api.jar打包到最终产品中,但是会不会将问题部署到Tomcat 7?
答案 0 :(得分:1)
应用程序开发
Tomcat实现JSR-356定义的Java WebSocket 1.1 API。
来自Tomcat 7文档:
不推荐使用的专有API
在开发JRS-356之前,Tomcat提供了专有的WebSocket API。此API已在Tomcat 7中弃用,并且将在 在Tomcat 8中删除。不太可能有任何进一步的发展 除了错误修复之外,这个专有API。
有关此API的信息,请参阅org.apache.catalina.websocket包的Javadoc。 Javadoc页面不是 包含在Tomcat二进制发行版中。要在本地查看它们 必须下载并安装&#34;完整文档&#34;分配, 或者从源代码构建它。您也可以在Apache Tomcat上阅读此内容 网站。从
WebSocketServlet
类开始。
我怀疑您可以同时使用这两种实现,但根据文档,您不应该在两个版本上运行JSR-356特定实现时遇到问题。请远离专有实施。
由于Tomcat 7的第一个版本于2010/2011发布,但JSR-356于2013年首次发布,有些古老版本没有标准的websocket实现,我将离开向您了解JSR-356实现首先包含在哪个版本中。但是,由于错误修正,包括与安全相关的错误修正,您应该只有时间来支持最新版本的Tomcat 7.不要担心那些几年没有更新其服务器软件的人。 / p>