Gen*_*rme 6 javascript java tomcat websocket
很多人都认为我使用的是IDE,所以现在让我说明一下:我不使用任何IDE.
我使用以下Java源代码,将其编译为Echo.class,然后Echo.war通过jar -cvf Echo.war Echo.class在Windows CMD中编写创建,并将文件上传到文件$TOMCAT_HOME/webapps夹中:
@ServerEndpoint("/echo")
public class Echo {
@OnMessage
public String echo(String incomingMessage) {
return "I recieved ('" + incomingMessage + "'), so I am returning it.";
}
}
Run Code Online (Sandbox Code Playgroud)
启动Tomcat后,我突然有了以下文件夹结构:
<webapps>
...
<Echo.war>
<Echo>
<Echo.class>
<META-INF>
<MANIFEST.MF>
</META-INF>
</Echo>
</webapps>
Run Code Online (Sandbox Code Playgroud)
当尝试通过JavaScript打开到我的端点的websocket连接时new WebSocket("ws://example.com:8080/Echo/echo"),我得到404响应而不是101握手.
catalina.out不再为空,经理现在显示:
以下内容catalina.out太大,无法包含在这篇文章中:http://pastebin.com/cwLviH5b
Echo.war在线路被提及650,651,690,和691.
我研究了一下,看到如果用Java 8构建类,但是你的Tomcat在Java 7上运行,你会得到一个UnsupportedClassVersionError.我没有得到那个错误,但我想我也可以更新到服务器上的Java 8.我这样做并重新部署了WAR,但没有任何改变.
我也改变了注释,从@ServerEndpoint("/echo")到@ServerEndpoint("/dest")的情况下,有一个名称冲突,但这并没有帮助.
以下是我正在阅读的书中的引用:
部署EchoServer WebSocket端点非常简单.您需要编译源文件,在WAR文件中包含类文件,然后部署WAR文件.Web容器将检测WAR文件中是否包含WebSocket端点,并进行必要的设置以进行部署.完成这些步骤后,您就可以第一次调用WebSocket端点了.
我认为我必须在里面创建一个带有单个类文件的WAR文件,但也许情况并非如此,因为他说"WAR文件"而不是"WAR文件".
根据维基百科的这篇文章,WAR文件必须包含一个web.xml文件(有人可能想知道为什么他没有提到这个).这是真的吗?这是为什么它不起作用?如果是,web.xml应该包含什么?当然,它不仅仅是一个名为"web.xml"的空文件.
创建以下文件结构
WEB-INF
|
- classes
|
- Echo.class
Run Code Online (Sandbox Code Playgroud)
并jar -cvf echo.war *从父文件夹创建您的war文件WEB-INF.将此war文件部署到tomcat并尝试使用web-socket进行连接.