【问题标题】:client Connection refused by jetty server-version11.0.0客户端连接被jetty server-version11.0.0拒绝
【发布时间】:2021-10-16 23:18:53
【问题描述】:

主类

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 在 org.eclipse.jetty.websocket.core.internal.WebSocketSessionState.onEof(WebSocketSessionState.java:174) 在 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.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) 在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) 在 org.eclipse.jetty.io.SocketChannelEndPoint$1.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) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) 在 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)

连接被拒绝并出现错误 ****JDK version is 11 ****

【问题讨论】:

    标签: jetty java-11 embedded-jetty java-websocket jetty-10


    【解决方案1】:

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

    【讨论】:

    • 就是这样,对于所有 Jetty 工件,您必须全面使用相同的版本。考虑使用 jetty-bom 将您的版本与 maven 对齐。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多