Java 如何更正带注释的websocket类的路径?

Java 如何更正带注释的websocket类的路径?,java,tomcat,servlets,websocket,path,Java,Tomcat,Servlets,Websocket,Path,我正在处理一个客户机-服务器项目,在将Websocket客户机连接到Tomcat服务器时遇到问题。我在本地设备上设置了Tomcat,它运行正常。它在默认端口8080上运行。这是我的目录设置 > Tomcat > webapps > myServer > WEB-INF > src > MyClass.java > EchoAnnotation.java &

我正在处理一个客户机-服务器项目,在将Websocket客户机连接到Tomcat服务器时遇到问题。我在本地设备上设置了Tomcat,它运行正常。它在默认端口8080上运行。这是我的目录设置

> Tomcat
  > webapps
    > myServer
      > WEB-INF
        > src
          > MyClass.java
          > EchoAnnotation.java
          > HelloWorldServlet.java
        > classes
          > MyClass.class
          > EchoAnnotation.class
          > HelloWorldServlet.class
        > web.xml
        > build.xml
      > lib
        > javaee-api-7.0.jar
        > servlet-api.jar
        > {other misc jars}
      > META-INF
        > context.xml
      > index.html
我的web.xml中有此设置

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

<!-- ======= SERVLETS ======= -->
    <servlet>
        <servlet-name>EchoAnnotation</servlet-name>
        <servlet-class>server.EchoAnnotation</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MyClass</servlet-name>
        <servlet-class>server.MyClass</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>server.HelloWorldServlet</servlet-class>
    </servlet>

<!-- ======= SERVLET MAPPING ======= -->
    <servlet-mapping>
        <servlet-name>EchoAnnotation</servlet-name>
        <url-pattern>/server/echo</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/server/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MyClass</servlet-name>
        <url-pattern>/server/myclass</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.xhtml</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>
当我使用“ws://127.0.0.1:8080/examples/websocket/echoAnnotation”(来自示例)时,我的客户机工作正常,但如果我使用自己的ws://127.0.0.1:8080/myServer/server/echo,我就没有运气了。它给出了404,但现在它给出了下面的错误

javax.servlet.ServletException: Class [server.EchoAnnotation] is not a Servlet
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:835)

java.lang.ClassCastException: class server.EchoAnnotation cannot be cast to class javax.servlet.Servlet (server.EchoAnnotation is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @1497b15b; javax.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @533ddba)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:835)
值得一提的是,MyClass.class和HelloWorldServlet.class加载良好,但它们没有注释,也没有使用WebSocket


如何正确地将annotations类映射到服务器?

不应将Websocket端点视为servlet。从web.xml中删除servlet声明。只需尝试使用ws://127.0.0.1:8080/myServer/echo(假设“myServer”是您的war文件名)