我试图创建一个包含单个WebSocket servlet的war文件。出于某种原因,jetty想要HttpClient,即使我只想拥有服务器端逻辑。 HttpClient存在于" jetty-client-9.4.0.v20161208.jar" Jetty下的文件。但是那个状态转储中没有列出(jetty.server.dumpAfterStart = true)。
的web.xml
./terraform_apply.sh
插口:
<web-app>
<display-name>WebSocketApp</display-name>
<servlet>
<servlet-name>wsservlet</servlet-name>
<servlet-class>com.example.test.MyJettyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wsservlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Gradle构建文件:
@ServerEndpoint("/control")
public class ControlSocket {
@OnOpen
public void onOpen(Session session) {
System.out.println("WebSocket opened: " + session.getId());
}
@OnMessage
public void onMessage(String txt, Session session) throws IOException {
System.out.println("Message received: " + txt);
session.getBasicRemote().sendText(txt.toUpperCase());
}
@OnClose
public void onClose(CloseReason reason, Session session) {
System.out.println("Closing a WebSocket due to " + reason.getReasonPhrase());
}
}
我假设依赖关系有问题。但到底是什么?我应该包括websocket实现罐吗?如果是,那么为什么?
答案 0 :(得分:3)
如果您使用jetty-distribution,请添加client
模块。
$ cd /path/to/mybase
$ java -jar /path/to/jetty-dist/start.jar --add-to-start=client
Jetty 9.4.1 btw正在改进。