【问题标题】:Embedded Jetty 9嵌入式码头 9
【发布时间】:2014-02-25 22:11:51
【问题描述】:

我不明白如何将这段代码改写为 6 号码头用于 9 号码头:

import org.mortbay.jetty.*;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;

public class ApplLauncher {
    public static void main(String[] args) {
        Server server = new Server();

        Connector connector = new SelectChannelConnector();
        connector.setPort(8080);
        server.addConnector(connector);

        WebAppContext root = new WebAppContext("C:\\Users\\OZKA\\IdeaProjects\\projectname\\projectname\\web", "/");
        root.setWelcomeFiles(new String[]{"index.html"});
        //root.addServlet(new ServletHolder(new TestServlet()), "/test");

        server.setHandlers(new Handler[]{root});

        try {
            server.start();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

上面的代码工作正常,响应来自 web 文件夹和 servlet 的静态内容,映射在 web.xml 中。这是我使用嵌入式码头 9 的尝试:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.Handler;


public class ApplLauncher {
    public static void main(String[] args) {
        System.out.println("Hello from ScalaSbt Web Project");
        Server server = new Server(8080);
        WebAppContext webapp = new WebAppContext("D:\\Dev\\Scala\\ScalaTestProject\\web\\", "/");
        ResourceHandler resource_handler = new ResourceHandler();
        resource_handler.setWelcomeFiles(new String[]{ "index.html" });
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { resource_handler, webapp});
        server.setHandler(handlers);
        try {
            server.start();
            server.join();
        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
    }

}

服务器正在启动,但是 index.html 请求抛出错误:

"java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z"

我试图在 Google 中找到一个可行的示例,但没有发现任何有用的东西。官方示例和文档非常混乱,我不明白如何使用嵌入式码头版本 9。

【问题讨论】:

  • 你是如何构建和运行这个应用程序的?从您的代码看来,您可能正在使用 SBT?在这种情况下,您能否向我们展示您的 build.sbt 文件?
  • 我只是在 Idea IDE 中运行 AppLauncher,SBT 仅用于管理依赖项。

标签: java servlets embedded-jetty


【解决方案1】:

错误消息清楚地表明您的类路径中的 Servlet API 版本错误。

检查你的依赖,你可能在某个地方有 pre-3.0 Servlet API,它应该被删除。

【讨论】:

  • 非常感谢,我在 ProjectSettings/Modules/Dependencies javax-servlet api 2.4 中删除,服务器显示我的索引页面。
【解决方案2】:

如果你使用 Gradle 则执行

gradle dependencies

分析依赖树,排除版本低于 3.0 的 'servlet-api' 依赖。您可以执行以下操作来排除

compile ('javax.servlet:jsp-api:2.0'){
    exclude module : 'servlet-api'
}

可以有多个依赖项,其中还包括 servlet-api-2.x。排除所有这些

【讨论】:

    【解决方案3】:

    添加 @axtavt 所说的内容:如果您使用的是 maven,请添加以下依赖项:

     <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
            <scope>provided</scope>
     </dependency>
    

    同时执行mvn dependency:tree |grep servlet 并仔细检查您是否没有导入 servlet-api:2.x。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多