Java ServletException:ClassNotFoundException org.eclipse.jetty.websocket.server.WebSocketServerFactory

Java ServletException:ClassNotFoundException org.eclipse.jetty.websocket.server.WebSocketServerFactory,java,maven,servlets,jetty,pom.xml,Java,Maven,Servlets,Jetty,Pom.xml,我设置了一个Websocket服务器,该服务器应该运行一个由Websocket servlet工厂创建的servlet。 然而,每当我试图通过我最喜欢的浏览器访问websocket时,我都会 HTTP ERROR: 500 Problem accessing /test/sound. Reason: javax.servlet.ServletException: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket

我设置了一个Websocket服务器,该服务器应该运行一个由Websocket servlet工厂创建的servlet。
然而,每当我试图通过我最喜欢的浏览器访问websocket时,我都会

HTTP ERROR: 500

Problem accessing /test/sound. Reason:

    javax.servlet.ServletException: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketServerFactory
服务器控制台给出了类似的错误。以下是完整的控制台错误消息:

    [13:21:26 WARN]: 2015-08-27 13:21:26.912:WARN:/test:qtp20972561-41: unavailable
java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketSe
rverFactory
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.lo
ad(WebSocketServletFactory.java:63)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.cr
eate(WebSocketServletFactory.java:42)
        at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketSe
rvlet.java:128)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.jav
a:612)
        at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java
:468)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:778
)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:587)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1125)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
515)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1059)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java
:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:620)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool
.java:540)
        at java.lang.Thread.run(Unknown Source)
[13:21:26 WARN]: 2015-08-27 13:21:26.913:WARN:oejs.ServletHandler:qtp20972561-41
:
javax.servlet.ServletException: java.lang.ClassNotFoundException: org.eclipse.je
tty.websocket.server.WebSocketServerFactory
        at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketSe
rvlet.java:138)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.jav
a:612)
        at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java
:468)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:778
)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:587)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1125)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
515)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1059)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java
:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:620)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool
.java:540)
        at java.lang.Thread.run(Unknown Source)
Caused by:
java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketSe
rverFactory
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.lo
ad(WebSocketServletFactory.java:63)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.cr
eate(WebSocketServletFactory.java:42)
        at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketSe
rvlet.java:128)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.jav
a:612)
        at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java
:468)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:778
)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:587)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1125)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
515)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1059)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java
:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:620)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool
.java:540)
        at java.lang.Thread.run(Unknown Source)
我的最佳选择是,我在pom.xml中忘记了一些东西,因为WebSocketServletFactory类丢失了,但我不确定

以下是我在pom.xml中的存储库和依赖项

<repositories>
        <repository>
            <id>spigot-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
        </repository>
        <repository>
            <id>googlecode</id>
            <name>jWebSocket Repository</name>
            <url>http://jwebsocket.googlecode.com/svn/repo</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.8.8-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.2.5.v20141112</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>9.2.5.v20141112</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-server</artifactId>
            <version>9.2.5.v20141112</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
    </dependencies>

插销式回购
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
谷歌代码
jWebSocket存储库
http://jwebsocket.googlecode.com/svn/repo
org.spigotmc
插口api
1.8.8-R0.1-快照
假如
org.eclipse.jetty
jetty服务器
9.2.5.v20141112
org.eclipse.jetty
码头servlet
9.2.5.v20141112
org.eclipse.jetty.websocket
websocket服务器
9.2.5.v20141112
爪哇
JavaEEAPI
7
如何解决此错误?如果需要更多的来源,请申请

注意:此答案假设您使用的是码头分布和正态分布 webapps(WAR)文件

war文件的
WEB-INF/lib
WEB-INF/classes
,因此提供了
设置

使用jetty发行版9.x,确保在
${jetty.base}/start.ini中设置了
--module=websocket

如果您是为jetty原生websocket api编写的,请使用以下

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-api</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-servlet</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-client</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-server-impl</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-client-impl</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
如果您想要javax.websocket(AJAJSR-356客户机)支持,请使用此

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-api</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-servlet</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-client</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-server-impl</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-client-impl</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>

org.eclipse.jetty.websocket
javaxwebsocket客户端impl
9.3.2.v20150730
假如

在pom中对websocket工件的其他引用是无用和无意义的,不要使用它们。

我终于自己回答了我的问题。这个问题可以通过将类路径添加到META-INF/manifest.mf文件中丢失的JAR中来解决

也许我应该提到我试图通过bukkit插件在minecraft服务器上运行jetty服务器。现在一切正常。显然,这是向bukkit插件添加外部库的正确方法


感谢所有回答/评论的人。

请发布您的POM或至少其相关部分。@TimBiegeleisen在您离开之前编辑了它,我的朋友:看起来Jetty对容器隐藏了自己的实现。Web套接字属于此类别。请立即试用