Java Jetty WebSockets 的 Jar/Class 问题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20304993/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Jar/Class problems with Jetty WebSockets
提问by Fedorov Alexandr
I have a problem with WebSockets. Carried out by a Java development environment IntelliJ IDEA Community Edition 12.1.6 using Jetty 9.1.0 and Maven. I created two classes (code below). Class WsHandler:
我有 WebSockets 的问题。由 Java 开发环境 IntelliJ IDEA Community Edition 12.1.6 使用 Jetty 9.1.0 和 Maven 执行。我创建了两个类(下面的代码)。WsHandler 类:
public class WsHandler extends WebSocketHandler {
private final ConcurrentMap<String, Set<EventWebSocket>> eventsSubscribers = new ConcurrentHashMap<>();
@Override
public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
return new EventWebSocket();
}
private void fireEvent(String eventName) {
Set<EventWebSocket> subscribers = eventsSubscribers.get(eventName);
System.out.println("Event " + eventName + " was occurred. Subscribers " + subscribers);
if (subscribers != null) {
for (EventWebSocket webSocket : subscribers) {
webSocket.onEvent(eventName);
}
}
}
public final class EventWebSocket implements WebSocket.OnTextMessage {
private Connection connection;
private List<String> subscribedEvents = new LinkedList();
@Override
public void onOpen(Connection connection) {
System.out.println("Open connection " + connection);
this.connection = connection;
}
@Override
public void onMessage(String data) {
System.out.println("Process msg: " + data);
if (data.isEmpty()) return;
if (data.startsWith("Sub")) { // subscribe
if (data.length() < 5) return;
String eventName = data.split(":")[1]; // subscribing message format "Sub:EventName"
Set<EventWebSocket> subscribers = eventsSubscribers.get(eventName);
// double-check idiom for lazy initialization
if (subscribers == null) {
synchronized (EventHandler.class) {
if (eventsSubscribers.get(eventName) == null) {
subscribers = new CopyOnWriteArraySet<>();
eventsSubscribers.putIfAbsent(eventName, subscribers);
}
}
}
subscribers.add(this);
subscribedEvents.add(eventName);
} else if (data.startsWith("Fire")) { // fire event
if (data.length() < 6) return;
String eventName = data.split(":")[1]; // Fire event message format "Fire:EventName"
fireEvent(eventName);
} else {
try {
connection.sendMessage("Unknown command: " + data);
} catch (IOException ex) {
System.err.println("Ooops: " + ex + ". Close connection " + connection);
}
}
}
public void onEvent(String eventName) {
try {
connection.sendMessage("Event " + eventName + " was occurred");
} catch (IOException ex) {
System.err.println("Ooops: " + ex + ". Close connection " + connection);
}
}
@Override
public void onClose(int closeCode, String message) {
System.out.println("Close connection " + connection);
// remove from subscribers
for (String eventName : subscribedEvents) {
eventsSubscribers.get(eventName).remove(this);
}
}
}}
Class SimpleEchoClien:
SimpleEchoClien 类:
public class SimpleEchoClient {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
WsHandler handler = new WsHandler();
server.setHandler(handler);
server.start();
server.join();
}}
Run and get the error:
运行并得到错误:
"C:\Program Files\Java\jdk1.7.0_17\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.1.6\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_17\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\jfxrt.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\zipfs.jar;C:\Users\Alexandr.Alexandr-PC\Documents\java\Shooter\target\classes;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.1.6\lib\junit-4.10.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\freemarker\freemarker.3.19\freemarker-2.3.19.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-server.1.0.M0\jetty-server-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\javax\servlet\javax.servlet-api.1.0\javax.servlet-api-3.1.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-http.1.0.M0\jetty-http-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-util.1.0.M0\jetty-util-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-io.1.0.M0\jetty-io-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-webapp.1.0.M0\jetty-webapp-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-xml.1.0.M0\jetty-xml-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-servlet.1.0.M0\jetty-servlet-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-security.1.0.M0\jetty-security-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-rewrite.1.0.M0\jetty-rewrite-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-client.1.0.M0\jetty-client-9.1.0.M0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\mockito\mockito-all.8.4\mockito-all-1.8.4.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-java.4.0\selenium-java-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-android-driver.4.0\selenium-android-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver.4.0\selenium-remote-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\cglib\cglib-nodep.1_3\cglib-nodep-2.1_3.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\json\json080701\json-20080701.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-api.4.0\selenium-api-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\com\google\guava\guava\r09\guava-r09.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\httpcomponents\httpclient.0.2\httpclient-4.0.2.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\httpcomponents\httpcore.0.1\httpcore-4.0.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-logging\commons-logging.1.1\commons-logging-1.1.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-codec\commons-codec.4\commons-codec-1.4.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver.4.0\selenium-chrome-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-htmlunit-driver.4.0\selenium-htmlunit-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\htmlunit\htmlunit.8\htmlunit-2.8.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\xalan\xalan.7.1\xalan-2.7.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\xalan\serializer.7.1\serializer-2.7.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\xml-apis\xml-apis.3.04\xml-apis-1.3.04.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-collections\commons-collections.2.1\commons-collections-3.2.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-lang\commons-lang.4\commons-lang-2.4.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\httpcomponents\httpmime.0.1\httpmime-4.0.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\james\apache-mime4j"C:\Program Files\Java\jdk1.7.0_17\bin\java"
-Didea.launcher.port=7532
"-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.1.6\bin"
-Dfile.encoding=UTF-8
-classpath "C:\Program Files\Java\jdk1.7.0_17\jre\lib\charsets.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\deploy.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\javaws.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\jce.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\jfr.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\jfxrt.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\jsse.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\management-agent.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\plugin.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\resources.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\rt.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\access-bridge-64.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\dnsns.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\jaccess.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\localedata.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\sunec.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\sunjce_provider.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\sunmscapi.jar
C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext\zipfs.jar
C:\Users\Alexandr.Alexandr-PC\Documents\java\Shooter\target\classes
C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.1.6\lib\junit-4.10.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\freemarker\freemarker.3.19\freemarker-2.3.19.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-server.1.0.M0\jetty-server-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\javax\servlet\javax.servlet-api.1.0\javax.servlet-api-3.1.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-http.1.0.M0\jetty-http-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-util.1.0.M0\jetty-util-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-io.1.0.M0\jetty-io-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-webapp.1.0.M0\jetty-webapp-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-xml.1.0.M0\jetty-xml-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-servlet.1.0.M0\jetty-servlet-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-security.1.0.M0\jetty-security-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-rewrite.1.0.M0\jetty-rewrite-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-client.1.0.M0\jetty-client-9.1.0.M0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\mockito\mockito-all.8.4\mockito-all-1.8.4.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-java.4.0\selenium-java-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-android-driver.4.0\selenium-android-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver.4.0\selenium-remote-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\cglib\cglib-nodep.1_3\cglib-nodep-2.1_3.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\json\json080701\json-20080701.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-api.4.0\selenium-api-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\com\google\guava\guava\r09\guava-r09.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\httpcomponents\httpclient.0.2\httpclient-4.0.2.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\httpcomponents\httpcore.0.1\httpcore-4.0.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-logging\commons-logging.1.1\commons-logging-1.1.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-codec\commons-codec.4\commons-codec-1.4.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver.4.0\selenium-chrome-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-htmlunit-driver.4.0\selenium-htmlunit-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\htmlunit\htmlunit.8\htmlunit-2.8.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\xalan\xalan.7.1\xalan-2.7.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\xalan\serializer.7.1\serializer-2.7.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\xml-apis\xml-apis.3.04\xml-apis-1.3.04.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-collections\commons-collections.2.1\commons-collections-3.2.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-lang\commons-lang.4\commons-lang-2.4.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\httpcomponents\httpmime.0.1\httpmime-4.0.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\apache\james\apache-mime4j2013-12-01 00:52:53.727:INFO:oejs.Server:main: jetty-9.1.0.M0
.6\apache-mime4j-0.6.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\htmlunit\htmlunit-core-js.8\htmlunit-core-js-2.8.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\xerces\xercesImpl.9.1\xercesImpl-2.9.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\nekohtml\nekohtml.9.14\nekohtml-1.9.14.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\cssparser\cssparser<!-- To write basic websockets against -->
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-api</artifactId>
<version>9.1.0.v20131115</version>
</dependency>
<!-- To run websockets in embedded server -->
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-server</artifactId>
<version>9.1.0.v20131115</version>
</dependency>
<!-- To run websockets client -->
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-client</artifactId>
<version>9.1.0.v20131115</version>
</dependency>
.9.5\cssparser-0.9.5.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\w3c\css\sac.3\sac-1.3.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-io\commons-io.0.1\commons-io-2.0.1.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver.4.0\selenium-firefox-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver.4.0\selenium-ie-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\java\dev\jna\jna.2.3\jna-3.2.3.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-iphone-driver.4.0\selenium-iphone-driver-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-support.4.0\selenium-support-2.4.0.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\junit\junit.11\junit-4.11.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\hamcrest\hamcrest-core.3\hamcrest-core-1.3.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-websocket.4.4.v20110707\jetty-websocket-7.4.4.v20110707.jar
C:\Users\Alexandr.Alexandr-PC\.m2\repository\javax\servlet\servlet-api.5\servlet-api-2.5.jar
C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.1.6\lib\idea_rt.jar"
com.intellij.rt.execution.application.AppMain servlets.SimpleEchoClient
.6\apache-mime4j-0.6.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\htmlunit\htmlunit-core-js.8\htmlunit-core-js-2.8.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\xerces\xercesImpl.9.1\xercesImpl-2.9.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\nekohtml\nekohtml.9.14\nekohtml-1.9.14.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\sourceforge\cssparser\cssparser<!-- To write basic javax.websocket against -->
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
</dependency>
<!-- To run javax.websocket in embedded server -->
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
<version>9.1.0.v20131115</version>
</dependency>
<!-- To run javax.websocket client -->
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-client-impl</artifactId>
<version>9.1.0.v20131115</version>
</dependency>
.9.5\cssparser-0.9.5.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\w3c\css\sac.3\sac-1.3.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\commons-io\commons-io.0.1\commons-io-2.0.1.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver.4.0\selenium-firefox-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver.4.0\selenium-ie-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\net\java\dev\jna\jna.2.3\jna-3.2.3.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-iphone-driver.4.0\selenium-iphone-driver-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\seleniumhq\selenium\selenium-support.4.0\selenium-support-2.4.0.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\junit\junit.11\junit-4.11.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\hamcrest\hamcrest-core.3\hamcrest-core-1.3.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\org\eclipse\jetty\jetty-websocket.4.4.v20110707\jetty-websocket-7.4.4.v20110707.jar;C:\Users\Alexandr.Alexandr-PC\.m2\repository\javax\servlet\servlet-api.5\servlet-api-2.5.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 12.1.6\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain servlets.SimpleEchoClient
2013-12-01 00:52:53.727:INFO:oejs.Server:main: jetty-9.1.0.M0
2013-12-01 00:52:53.747:WARN:oejuc.AbstractLifeCycle:main: FAILED servlets.WsHandler@267a1e1c: java.lang.NoClassDefFoundError: org/eclipse/jetty/http/HttpException
java.lang.NoClassDefFoundError: org/eclipse/jetty/http/HttpException
at org.eclipse.jetty.websocket.WebSocketHandler.doStart(WebSocketHandler.java:76)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:118)
at org.eclipse.jetty.server.Server.start(Server.java:342)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:100)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58)
at org.eclipse.jetty.server.Server.doStart(Server.java:290)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at servlets.SimpleEchoClient.main(SimpleEchoClient.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by:
java.lang.ClassNotFoundException: org.eclipse.jetty.http.HttpException
at java.net.URLClassLoader.run(URLClassLoader.java:366)
at java.net.URLClassLoader.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jetty.websocket.WebSocketHandler.doStart(WebSocketHandler.java:76)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:118)
at org.eclipse.jetty.server.Server.start(Server.java:342)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:100)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58)
at org.eclipse.jetty.server.Server.doStart(Server.java:290)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at servlets.SimpleEchoClient.main(SimpleEchoClient.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
2013-12-01 00:52:53.748:WARN:oejuc.AbstractLifeCycle:main: FAILED org.eclipse.jetty.server.Server@1b4ed400: java.lang.NoClassDefFoundError: org/eclipse/jetty/http/HttpException
java.lang.NoClassDefFoundError: org/eclipse/jetty/http/HttpException
at org.eclipse.jetty.websocket.WebSocketHandler.doStart(WebSocketHandler.java:76)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:118)
at org.eclipse.jetty.server.Server.start(Server.java:342)
at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:100)
at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58)
at org.eclipse.jetty.server.Server.doStart(Server.java:290)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
at servlets.SimpleEchoClient.main(SimpleEchoClient.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
With what the problem could be related? Thanks in advance.
问题可能与什么有关?提前致谢。
采纳答案by Joakim Erdfelt
First, your command line, decomposed to make it readable:
首先,将您的命令行分解为可读:
##代码##And your first line of output from your program
以及您程序的第一行输出
##代码##You have multiple things to take care of.
你有很多事情要处理。
- You are running mixed versions of Jetty. Your jetty websockets is at
7.4.4.v20110707
while the rest of Jetty is at9.1.0.M0
. - You should upgrade to the final (non-milestone, non-release candidate) version of Jetty 9.1 for the most mature websocket implementation. That would be jetty
9.1.0.v20131115
- Your code example is for the early draft implementations of websocket, and shows you are looking at some extremely old code examples. Would discourage you from using that long since deprecated API.
- Your version of Java is old. 1.7 update 17 expired back in June (yes, Java versions expire. Read the release notes. eg: u40 expires on 12/10/2013, and u45 expires on 1/14/2014)
- Use either the Modern Jetty WebSocket API, or the javax.websocket standard API.
- 您正在运行混合版本的 Jetty。您的码头 websockets 位于
7.4.4.v20110707
Jetty 的其余部分位于9.1.0.M0
. - 您应该升级到 Jetty 9.1 的最终(非里程碑、非发布候选)版本以获得最成熟的 websocket 实现。那将是码头
9.1.0.v20131115
- 您的代码示例用于 websocket 的早期草案实现,并显示您正在查看一些非常旧的代码示例。会阻止您使用那些早已弃用的 API。
- 您的 Java 版本很旧。1.7 更新 17 已于 6 月到期(是的,Java 版本已到期。阅读发行说明。例如:u40 于 12/10/2013 到期,而u45 于 1/14/2014 到期)
- 使用Modern Jetty WebSocket API或javax.websocket 标准 API。
Modern Jetty WebSocket API
现代 Jetty WebSocket API
An example project has been setup at:
已在以下位置设置了一个示例项目:
The maven dependencies you'll need:
您需要的 Maven 依赖项:
##代码##Look at the example code.
查看示例代码。
EventServer.java
- this the jetty embedded server code, to initialize the handler tree + ServletContext. It maps theEventServlet
to the path spec of"/events/*"
EventServlet.java
- this simply registers theEventSocket
with the Servlet (For background, the WebSocketServletFactory has a simple default implementation ofWebSocketCreator
that only supports 1 websocket. The.register(Class<?>)
call simply tells this default WebSocketCreator what WebSocket to create. If you want a more complex WebSocketCreator, then you would callWebSocketServletFactory.setCreator(WebSocketCreator)
with your own implementation)EventSocket.java
- the actual websocket that receives the incoming eventsEventClient.java
- since your demo code was called client, but had server code in it, I didn't really know what you were planning, so i tossed in a Native Jetty WebSocket Client example as well.
EventServer.java
- 这是码头嵌入式服务器代码,用于初始化处理程序树 + ServletContext。它映射EventServlet
到路径规范"/events/*"
EventServlet.java
- 这只是EventSocket
向 Servlet注册(对于背景,WebSocketServletFactory 有一个简单的默认实现WebSocketCreator
,它只支持 1 个 websocket。.register(Class<?>)
调用只是告诉这个默认的 WebSocketCreator 创建什么 WebSocket。如果你想要一个更复杂的 WebSocketCreator,那么你会调用WebSocketServletFactory.setCreator(WebSocketCreator)
与您自己的实现)EventSocket.java
- 接收传入事件的实际 websocketEventClient.java
- 由于您的演示代码被称为客户端,但其中包含服务器代码,我真的不知道您在计划什么,所以我也加入了 Native Jetty WebSocket Client 示例。
javax.websocket standard API on Jetty
Jetty 上的 javax.websocket 标准 API
An example project has been setup at:
已在以下位置设置了一个示例项目:
The maven dependencies you'll need:
您需要的 Maven 依赖项:
##代码##Look at the example code.
查看示例代码。
EventServer.java
- this is slightly different than the Native API, as everything in the javax.websocket world is based on Annotations with discovery. So this embedded server establishes a ServletContextHandler, then initializes the javax.websocket layer with a call toWebSocketServerContainerInitializer.configureContext(context)
, finally with a manualaddEndpoint(Class)
against theServerContainer
.EventSocket.java
- using the annotations for javax.websocket, this class is both annotated to be a Server endpoint and a Client endpoint, with the methods that should receive the various events also annotated to indicate their desired purpose.EventClient.java
- this uses the javax.websocket WebSocketContainer(client container) to connect to the server and send a message. (of particular note, is the extra work to cleanup the lifecycle of the WebSocketContainer. a missing feature from the JSR-356 spec)
EventServer.java
- 这与 Native API 略有不同,因为 javax.websocket 世界中的所有内容都基于具有发现功能的注解。所以这个嵌入式服务器建立了一个 ServletContextHandler,然后通过调用初始化 javax.websocket 层WebSocketServerContainerInitializer.configureContext(context)
,最后通过手动addEndpoint(Class)
对ServerContainer
.EventSocket.java
- 使用 javax.websocket 的注释,这个类既被注释为服务器端点,又被注释为客户端端点,并且应该接收各种事件的方法也被注释以表明它们的预期目的。EventClient.java
- 这使用 javax.websocket WebSocketContainer(客户端容器)连接到服务器并发送消息。(特别值得注意的是,清理 WebSocketContainer 生命周期的额外工作。JSR-356 规范中缺少的功能)
Good luck
祝你好运