首页 > 解决方案 > 客户端连接被jetty server-version11.0.0拒绝

问题描述

主类

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;

public class WebSocketServer {
    private Server server;

    public void setup() {
        server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(12345);
        server.addConnector(connector);
        ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
        contextHandler.setContextPath("/");
        contextHandler.addServlet(WebSocketServlet.class, "/websocket");
        JettyWebSocketServletContainerInitializer.configure(contextHandler, null);
        
            server.setHandler(contextHandler);
        
    }

    public void start() throws Exception {
        server.start();
        server.dump(System.err);
        server.join();
    }

    public static void main(String args[]) throws Exception {
        WebSocketServer webSocketServer = new WebSocketServer();
        webSocketServer.setup();
        webSocketServer.start();
    }
}

JettyWebsocketServelet 实现:

public class WebSocketServlet extends JettyWebSocketServlet {

    @Override
    protected void configure(JettyWebSocketServletFactory factory) {
        // TODO Auto-generated method stub
        factory.register(WebSocketServer.class);
    }
      
}

依赖:

<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jetty-server</artifactId>
    <version>11.0.2</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>11.0.2</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-http</artifactId>
    <version>11.0.2</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlets</artifactId>
    <version>11.0.0</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-jetty-client</artifactId>
    <version>11.0.0</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-annotations</artifactId>
    <version>11.0.0.beta3</version>
</dependency>
<groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>11.0.2</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-io</artifactId>
    <version>11.0.2</version>
</dependency>

错误:

java.nio.channels.ClosedChannelException at org.eclipse.jetty.websocket.core.internal.WebSocketSessionState.onEof(WebSocketSessionState.java:174) at org.eclipse.jetty.websocket.core.internal.WebSocketCoreSession.onEof(WebSocketCoreSession.java :329) 在 org.eclipse.jetty.websocket.core.internal.WebSocketConnection.fillAndParse(WebSocketConnection.java:456) 在 org.eclipse.jetty.websocket.core.internal.WebSocketConnection.onFillable(WebSocketConnection.java:314) 在org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) 在 org.eclipse.jetty.io.SocketChannelEndPoint$1 的 org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) .run(SocketChannelEndPoint.java:101) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill。doProduce(EatWhatYouKill.java:310) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill. java:132) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) 在 java .base/java.lang.Thread.run(Thread.java:834)运行(Thread.java:834)运行(Thread.java:834)

连接被拒绝并出现错误 ****JDK 版本为 11 ****

标签: jettyjava-11embedded-jettyjava-websocketjetty-10

解决方案


错误消息是类路径上相同依赖项的两个稍微不同版本的结果。这意味着类路径中有多个或多个依赖项。我无法为此指出确切的解决方案,但通常用于调试使用带有 -verbose 选项的 JVM 然后查看异常发生时正在加载的类。您应该会看到一些令人惊讶的信息。例如,拥有相同依赖项和版本的多个副本,如果您知道它们被包含在内,您从未期望或会接受它们。要使用重复 jar 解决此问题,您可以使用http://maven.apache.org/plugins/maven-dependency-plugin/ 结合https://maven.apache.org/enforcer/maven-enforcer-plugin/ 。你需要将这些 jar 添加到顶级 POM 的一部分。


推荐阅读