当前位置: 首页 > 知识库问答 >
问题:

使用jetty和Repast simphony时出错

漆雕修能
2023-03-14

我想使用Java websocket与Repast simphony但它不工作,我得到以下错误:

    java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext;
        at org.eclipse.jetty.websocket.servlet.UpgradeHttpServletRequest.(UpgradeHttpServletRequest.java:91)
        at org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest.(ServletUpgradeRequest.java:52)
        at org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:156)
        at org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:148)
        at org.eclipse.jetty.websocket.server.WebSocketHandler.handle(WebSocketHandler.java:97)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:610)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539)
        at java.lang.Thread.run(Thread.java:745)

有人能解释一下如何解决这个错误吗?谢谢

我测试了从互联网上获取的代码,如果我不使用repast simphony运行它,它就能正常工作

我的服务器

    package webSocketTest;

    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.websocket.server.WebSocketHandler;
    import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;

    public class WebSocketTest {

        public static void main(String[] args) throws Exception {
            Server server = new Server(8080);
            WebSocketHandler wsHandler = new WebSocketHandler() {
                @Override
                public void configure(WebSocketServletFactory factory) {
                    factory.register(MyWebSocketHandler.class);
                }
            };
            server.setHandler(wsHandler);
            server.start();
            server.join();
        }
    }


    package webSocketTest;

    import java.io.IOException;
    import org.eclipse.jetty.websocket.api.Session;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
    import org.eclipse.jetty.websocket.api.annotations.WebSocket;

    @WebSocket
    public class MyWebSocketHandler {

        @OnWebSocketClose
        public void onClose(int statusCode, String reason) {
            System.out.println("Close: statusCode=" + statusCode + ", reason=" + reason);
        }

        @OnWebSocketError
        public void onError(Throwable t) {
            System.out.println("Error: " + t.getMessage());
        }

        @OnWebSocketConnect
        public void onConnect(Session session) {
            System.out.println("Connect: " + session.getRemoteAddress().getAddress());
            try {
                session.getRemote().sendString("Hello Webbrowser");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @OnWebSocketMessage
        public void onMessage(String message) {
            System.out.println("Message: " + message);
        }
    }

共有2个答案

季森
2023-03-14

我终于找到了解决办法。我移除了项目构建路径中默认存在的所有groovy JAR,它可以正常工作。

张晔
2023-03-14

删除groovy JAR的另一个替代方案:实际上,Repast Simphony2.2使用servlet-API2.4。它不包含javax.servlet.http.HttpServletRequest.getServletContext()方法。另一个解决方案是用最近的javax servlet-api替换Repast Simphony默认使用的servlet-api jar

 类似资料:
  • 我正在尝试创建一个简单的REST api,我遵循了Jersey网站上的教程:https://jersey.java.net/nonav/documentation/2.0/deployment.html 以下是错误: 原因:javax.servlet.unavailableException:org.eclipse.jetty.servlet.baseholder.doStart(basehold

  • 我正在使用m2eclipse。 我在pom中配置了jetty maven插件。正确使用xml。 当我试图通过CMD执行时,它工作得很好。没有错 而当我试图通过日蚀执行时, 我缺少一些Jetty-Eclipse配置。有人能对此提出建议吗? 如果你发现任何错误, MAVEN_OPTS="-XX: MaxPermsize=256M-Xmx512M-Xdebug-Xrunjdwp:传输=dt_socket

  • 代码: pom.xml依赖项: 我不明白发生了什么事,有人能帮忙吗?

  • 我试图创建一个WebSocket servlet上JBOSS与Jetty 8.1.8 这是我的代码:包com.microfocus.entrypoint.servlets; 这里有一个例外: 17:36:01,728 ERROR[org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/benAsync].[Asynch

  • 我尝试使用: Java11 RestEasy 4.1.0最终版 码头9.4.19. v20190610 gretty-gradle-plugin来自https://raw.github.com/gretty-gradle-plugin/gretty/master/pluginScripts/gretty.plugin 使用下面的子项目构建。格雷德尔: 但是,当我试图运行我的服务器使用:我得到以下异

  • “浏览器似乎已退出”selenium . common . exceptions . web driver exception:Message:浏览器似乎已在我们可以连接之前退出。如果您在FirefoxBinary构造函数中指定了log_file,请检查它以获取详细信息。 我正在使用 硒版本 2.53.6 Firefox版本47.0 14.04.4 python 3.4.3 这是我正在使用的代码