Java 如何更正带注释的websocket类的路径?
我正在处理一个客户机-服务器项目,在将Websocket客户机连接到Tomcat服务器时遇到问题。我在本地设备上设置了Tomcat,它运行正常。它在默认端口8080上运行。这是我的目录设置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 &
> 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文件名)