繁体   English   中英

将jetty 7更新为jetty 8:java.lang.NoClassDefFoundError:javax / servlet / FilterRegistration

[英]Updating jetty 7 to jetty 8 : java.lang.NoClassDefFoundError: javax/servlet/FilterRegistration

我试图通过嵌入jetty开发Web服务器。 所以对于jetty 7.3一切正常。 昨天我将jetty库更新到最新版本8.0.3,现在我通过创建一个ServletContextHandler得到了一个Exception。

线程“main”中的异常java.lang.NoClassDefFoundError:org.eclipse.jetty.servlet.ServletContextHandler中的javax / servlet / FilterRegistration。(ServletContextHandler.java:126)org.eclipse.jetty.servlet.ServletContextHandler。(ServletContextHandler.java :106)在org.gemsjax.server.GemsJaxServer.main(GemsJaxServer.java:38)的org.eclipse.jetty.servlet.ServletContextHandler。(ServletContextHandler.java:94)

所以我做的是:

    public static void main(String[] args) {

     Server server = new Server(8080);


        ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
        servletContext.setContextPath("/servlets");
        servletContext.addServlet(new ServletHolder( new CollaborationWebSocketServlet()),"/collaboration");


        // The ResourceHandler to handle static web content
        ResourceHandler resourceHandler = new ResourceHandler();
        resourceHandler.setDirectoriesListed(true);
        resourceHandler.setWelcomeFiles(new String[]{ "index.html" });


        resourceHandler.setResourceBase("./war/");


        ContextHandler resourceContext = new ContextHandler();
        resourceContext.setContextPath("/static");
        resourceContext.setHandler(resourceHandler);



        HandlerCollection handlers = new HandlerCollection();


        handlers.addHandler(resourceContext);
        handlers.addHandler(servletContext);

        server.setHandler(handlers);

        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }


}

抛出异常的行是:

ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);

我使用ubuntu 11.04:

openjdk java版“1.6.0_22”OpenJDK运行时环境(IcedTea6 1.10.2)(6b22-1.10.2-0ubuntu1~11.04.1)OpenJDK 64位服务器VM(内置20.0-b11,混合模式)

有没有人有建议?

Servlet 3.0中引入了javax.servlet.FilterRegistration 此异常表明您在运行时类路径中仍然存在较旧的Servlet API版本的库,这些库在类加载中具有优先权。 例如,从Internet上随机选择webapp的/WEB-INF/lib文件夹中的servlet-api.jar文件,或者在JRE的/lib文件夹中。 您应该删除那些位于类路径中的其他位置的servletcontainer特定库,而不是目标运行时本身。

如果你这样做是为了避免编译问题,那么你应该在类路径中使用目标运行时库。 在例如Eclipse中,您可以在项目属性的Target Runtime部分中执行此操作。 另请参见如何在Eclipse项目中导入javax.servlet API?

当您使用SBT时,FilterRegistration类存在于3.0中,如果您使用JETTY或Java 8这个JAR 2.5,它会自动添加为依赖项,

修复:Servlet-api-2.5 JAR是那里的混乱,我通过在依赖项中添加servlet-api-3.0 jar解决了这个问题,

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM