【发布时间】:2015-12-02 06:37:40
【问题描述】:
我已将 Jetty 嵌入到我的应用程序中。我有一个 webapp,并且我成功地在 Jetty 中部署了该 webapp。现在我对 Websockets 有了另一个要求。我按照link 在 Jetty 中部署 websockets。将 Websocket 部署到我的服务器后,第一个 web 应用程序无法正常工作(主页未打开)。这是图片
这是代码(这里很难粘贴整个代码。所以我正在粘贴 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 代码,则实际的 webapp 无法正常工作,但 websocket 代码正在运行。
那么如何在一个 Jetty 服务器上部署 webapp 和 websocket 呢?
更新:
我尝试将 Websockets 包含在当前的 webapp 本身中,但出现以下异常。
java.lang.NullPointerException: null 在 org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(WebSocketServerContainerInitializer.java:65) ~[javax-websocket-server-impl-9.3.6.v20151106.jar:9.3.6.v20151106] 在 com.tdg.daemon.server.RiseServer.getWebappHandlers(RiseServer.java:122) ~[classes/:na] 在 com.tdg.daemon.server.RiseServer.addWebApps(RiseServer.java:77) ~[classes/:na] 在 com.tdg.daemon.server.RiseServer.init(RiseServer.java:59) ~[classes/:na] 在 com.tdg.daemon.server.RiseServerConfiguration.build(RiseServerConfiguration.java:475) ~[classes/:na] 在 com.tdg.daemon.server.launcher.DefaultTdgServerLauncher.start(DefaultTdgServerLauncher.java:78) [classes/:na] 在 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.DefaultTdgServerLauncher.start(DefaultTdgServerLauncher.java:78) 在 com.tdg.daemon.server.launcher.DefaultTdgServerLauncher.main(DefaultTdgServerLauncher.java:140) [] 12/02/2015 17:50:06.985 [main - ] INFO c.t.d.s.l.DefaultTdgServerLauncher - RiseServer 在端口 80 和 443 上启动。
【问题讨论】:
-
你的 webapp 的 contextPath 是什么?您的服务器处理程序树/顺序是什么?为什么不能让 websockets 成为 Webapp 本身的一部分?
-
@JoakimErdfelt 我的 webapp 的上下文路径是 /tdg。我试图将 websockets 包含在同一个 webapp 本身中,但我得到了以下异常(请检查更新的异常,因为异常太长,无法粘贴到此处)。
标签: java websocket jetty java-websocket