我已將Jetty嵌入到我的應用程序中。我有一個Web應用程序,我成功地在Jetty中部署了該Web應用程序。現在我對Websockets有了另一個要求。我遵循這個link在Jetty中部署websockets。將Websocket部署到我的服務器後,第一個Web應用程序無法正常工作(主頁未打開)。這裏是圖像在jetty中部署webapps和websockets
下面是代碼(它很難在這裏粘貼整個代碼。所以我粘貼的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代碼的實際Web應用是不工作的,但websocket代碼正在工作。
那麼如何在一個Jetty服務器中部署webapp和websocket?
更新時間:
我想包括的WebSockets在當前Web應用本身,而是我得到了以下異常。
顯示java.lang.NullPointerException:空 在org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(WebSocketServerContainerInitializer.java:65)〜[使用javax-的WebSocket - 服務器 - IMPL-9.3 .6.v20151106.jar:9.3.6.v20151106] at com.tdg.daemon.server.RiseServer.getWebappHandlers(RiseServer.java:122)〜[classes /:na] at com.tdg.daemon.server。 RiseServer.addWebApps(RiseServer.java:77)〜[classes /:na] at com.tdg.daemon.server.RiseServer.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 at org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(WebSocketServerContainerInitializer.java:65) at com.tdg.daemon.server.RiseServer.getWebappHandlers(RiseServer.java:122 ) at com.tdg.daemon.server.RiseServer.addWebApps(RiseServer.java:77) at com.tdg.daemon.server.RiseServer.init(RiseServer.java:59) at com.tdg.daemon.server .RiseServerConfiguration.build(RiseServerConfiguration.java:475) at 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上啓動。
你的webapp的contextPath是什麼?什麼是您的服務器處理程序樹/訂單?爲什麼你不能將Websocket作爲Web應用程序本身的一部分? –
@JoakimErdfelt我的web應用程序的上下文路徑是/ tdg。我試圖將websocket包含在同一個webapp中,但我得到以下異常(請檢查更新的異常,因爲異常太長而無法粘貼)。 – Amar