在Jetty中使用Websockets



查看上一个问题

我正在尝试使用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

相关内容

  • 没有找到相关文章

最新更新