У меня встроенный Jetty в мое приложение. У меня есть один webapp, и я успешно развернул этот webapp в Jetty. Теперь я получил еще одно требование в Websockets. Я последовал за этим link для развертывания websockets в Jetty. После развертывания Websockets на моем сервере первый webapp не работает (домашняя страница не открывается). Вот образРазвертывание webapps и websockets in jetty
Вот код (Его очень трудно вставить весь код здесь. Так что я вставив WebAPP и развертывания WebSocket код).
Webapp Развертывание:
List<Handler> handlersList = new ArrayList<Handler>();
WebAppContext webAppContext = new WebAppContext();
webAppContext.setResourceBase(webApp.appDir);
webAppContext.setDescriptor(webApp.appDir + "/WEB-INF/web.xml");
webAppContext.setContextPath(webApp.contextPath);
webAppContext.setParentLoaderPriority(true);
// webAppContext.setWar(webApp.appDir);
webAppContext.setVirtualHosts(webApp.hostName);
handlersList.add(webAppContext);
argNewServer.setHandler(handlersList);
WebSocket Развертывание:
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/echo");
argServer.setHandler(context);
// Initialize javax.websocket layer
ServerContainer wscontainer;
try {
wscontainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wscontainer.addEndpoint(WebSocketServer.class);
} catch (ServletException | DeploymentException e) {
throw new RuntimeException("Exception while adding websocket endpoint: ", e);
}
WebSocketServer.java:
package com.tdg.chat;
import java.io.IOException;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/events/")
public class WebSocketServer {
@OnOpen
public void onWebSocketConnect(Session sess) {
System.out.println("Socket Connected: " + sess);
}
@OnMessage
public void onWebSocketText(Session argSession, String argMessage) throws IOException {
System.out.println("Received TEXT message: " + argMessage);
argSession.getBasicRemote().sendText("From Server: ");
}
@OnClose
public void onWebSocketClose(CloseReason reason) {
System.out.println("Socket Closed: " + reason);
}
@OnError
public void onWebSocketError(Throwable cause) {
cause.printStackTrace(System.err);
}
}
Если бы я включил вышеупомянутый код WebSocket фактический веб-приложение не работает, но код websocket работает.
Итак, как развернуть webapp и websocket на одном сервере Jetty?
Обновлено:
Я попытался включить WebSockets в текущем веб-приложение себя, но я получаю следующее исключение.
java.lang.NullPointerException: нуль в org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext (WebSocketServerContainerInitializer.java:65) ~ [javax-WebSocket-сервера осущ-9,3 .6.v20151106.jar: 9.3.6.v20151106] at com.tdg.daemon.server.RiseServer.getWebappHandlers (RiseServer.java:122) ~ [classes /: na] на com.tdg.daemon.server. RiseServer.addWebApps (RiseServer.java:77) ~ [classes /: na] at com.tdg.daemon.server.RisServer.init (RiseServer.java:59) ~ [classes /: na] at com.tdg. daemon.server.RiseServerConfiguration.build (RiseServerConfiguration.java:475) ~ [classes /: na] at com.tdg.daemon .server.launcher.DefaultTdgServerLauncher.start (DefaultTdgServerLauncher.java:78) [classes /: na] at com.tdg.daemon.server.launcher.DefaultTdgServerLauncher.main (DefaultTdgServerLauncher.java:140) [classes /: na] java.lang.NullPointerException в org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext (WebSocketServerContainerInitializer.java:65) в com.tdg.daemon.server.RiseServer.getWebappHandlers (RiseServer.java:122) на com.tdg.daemon.server.RiseServer.addWebApps (RiseServer.java:77) на com.tdg.daemon.server.RiseServer.init (RiseServer.java:59) на com.tdg.daemon.server .RiseServerConfiguration.build (RiseServerConfiguration.java:475) на com.tdg.daemon.server.launcher.DefaultTdgServerLaunc her.start (DefaultTdgServerLauncher.java:78) at com.tdg.daemon.server.launcher.DefaultTdgServerLauncher.main (DefaultTdgServerLauncher.java:140) [] 12/02/2015 17: 50: 06.985 [main -] INFO ctdslDefaultTdgServerLauncher - RiseServer запущен на портах 80 и 443.
Каков ваш контекст webappapp? Каково ваше дерево/заказ обработчика сервера? Почему у вас нет веб-узлов, которые могут быть частью самого Webapp? –
@JoakimErdfelt Контекст моего webapp - это/tdg. Я попытался включить websockets в тот же самый webapp, но я получаю следующее исключение (можете ли вы проверить обновленный, потому что исключение слишком длинное, чтобы вставить здесь). – Amar