查看上一个问题
我正在尝试使用Websockets设置一个应用程序并在Jetty中运行。然而,当我运行gradle jetyrun时,我得到:
javax.servlet.ServletException: Not running on Jetty, WebSocket support unavailable
at org.eclipse.jetty.websocket.server.WebSocketServerFactory.init(WebSocketServerFactory.java:411)
at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketServlet.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
这个页面暗示Websockets只在"Jetty容器内"可用,但我本以为Jetty插件默认会这样做。我需要重新配置它吗?
编辑:这个问题表明Jetty插件针对的是旧版本的Jetty(与websockets不兼容)。不过,它相当古老了——我不知道它尚未解决的说法是否仍然正确。我将尝试直接运行Jetty,而不是通过插件。
这个假设是正确的。
类org.mortbay.jetty.servlet.ServletHolder
告诉您正在运行Jetty 6。x标记EOL(生命终止)早在2010年。
该项目于2008年转移到Eclipse基金会,并于2009年10月发布了新的"Eclipse Jetty"(在org.eclipse.jetty
命名空间上)版本7.0.0。
你想要使用的WebSocket支持将需要Jetty 9.2+
你可以考虑不使用gradle插件,而只使用你自己设计的项目特定运行器模块中的嵌入式jetty实例。
,
package org.eclipse.jetty.cookbook;
import java.io.File;
import java.nio.file.Path;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class WebAppContextFromFileSystem
{
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
Path warPath = new File("webapps/hello.war").toPath().toRealPath();
System.err.println("WAR File is " + warPath);
// A very bare bones example (see other examples for
// how to use WebAppContext Configurations to enable
// jndi, annotations, etc ...)
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar(warPath.toUri().toASCIIString());
server.setHandler(webapp);
server.start();
server.join();
}
}
查看嵌入的jetty示例了解更多细节。
https://github.com/jetty-project/embedded-jetty-cookbookhttps://github.com/eclipse/jetty.project/tree/master/examples/embedded