无法连接到Tomcat

时间:2016-07-12 21:19:04

标签: tomcat java javascript websocket

很多人都认为我使用的是IDE,所以现在让我说明一下:我不使用任何IDE。

我使用以下Java源代码,将其编译为Echo.class,然后通过在Windows CMD中编写Echo.war创建jar -cvf Echo.war Echo.class,并将文件上传到$TOMCAT_HOME/webapps文件夹中:

@ServerEndpoint("/echo")
public class Echo {

    @OnMessage
    public String echo(String incomingMessage) {
        return "I recieved ('" + incomingMessage + "'), so I am returning it.";
    }
}

启动Tomcat后,我突然有了以下文件夹结构:

<webapps>
    ...
    <Echo.war>
    <Echo>
        <Echo.class>
        <META-INF>
            <MANIFEST.MF>
        </META-INF>
    </Echo>
</webapps>

尝试使用new WebSocket("ws://example.com:8080/Echo/echo")的JavaScript打开到我的终端的websocket连接时,我得到404响应而不是101握手。

如果有任何帮助,请参阅经理所显示的内容:enter image description here

(Tomcat 8更新):

我在this guide之后更新到Tomcat 8,现在catalina.out不再为空,管理员现在显示:{ {3}}

以下catalina.out的内容太大,无法包含在此帖子中:enter image description here

Echo.war650651690上提及了

691

我研究了一下,看到如果你使用Java 8构建类,但是你的Tomcat在Java 7上运行,你将获得UnsupportedClassVersionError。我没有得到这个错误,但我想我也可以更新到服务器上的Java 8。我这样做并重新部署了WAR,但没有任何改变。

我还将注释从@ServerEndpoint("/echo")更改为@ServerEndpoint("/dest"),以防有名称冲突,但这也没有帮助。

以下是http://pastebin.com/cwLviH5b的引用:

  

部署EchoServer WebSocket端点非常简单。   您需要编译源文件,在WAR中包含类文件   文件,并部署WAR文件。 Web容器将检测到这一点   WAR文件中包含一个WebSocket端点并执行   部署它的必要设置。完成这些步骤后,即可   准备好第一次调用WebSocket端点。

我认为我必须在里面创建一个带有单个类文件的WAR文件,但可能情况并非如此,因为他说&#34; WAR文件&#34; 和不是&#34;一个WAR文件&#34;

根据the book I am reading,WAR文件必须包含一个web.xml文件(有人可能想知道为什么他没有提到这个)。这是真的吗?这是为什么它不起作用?如果是,web.xml应该包含什么?当然,它不仅仅是一个名为&#34; web.xml&#34;。

的空文件

3 个答案:

答案 0 :(得分:6)

创建以下文件结构

WEB-INF
  |
   - classes
        |
         - Echo.class

jar -cvf echo.war *的父文件夹中WEB-INF创建war文件。将此war文件部署到tomcat并尝试使用web-socket进行连接。

答案 1 :(得分:0)

从WAR文件的构建中删除javax.websocket库。

如果您正在使用maven设置依赖关系。例如:

<!-- Provided Websocket API, because tomcat has its own implementation -->
<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.1</version>
    <scope>provided</scope>
</dependency>

在Eclipse或IntelliJ中,您可以设置要使用WAR导出的库。

来源:this Wikipedia article

答案 2 :(得分:0)

你是如何编写课程的?编译类时,依赖库必须位于类路径中。这些库也必须在战争部署

下的WEB-INF / lib目录中