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

标签 java jetty

我正在尝试通过嵌入 jetty 来开发网络服务器。所以使用 jetty 7.3 一切正常。昨天我将 jetty 库更新到最新版本 8.0.3,现在我通过创建 ServletContextHandler 得到了一个异常。

Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/FilterRegistration at org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java:126) at org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java:106) at org.eclipse.jetty.servlet.ServletContextHandler.(ServletContextHandler.java:94) at org.gemsjax.server.GemsJaxServer.main(GemsJaxServer.java:38)

所以我做的是:

    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,混合模式)

有人有什么建议吗?

最佳答案

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

如果您这样做是为了规避编译问题,那么您应该取而代之的是在类路径中获取目标运行时的库。例如,在 Eclipse 中,您可以在项目属性的Target Runtime 部分执行此操作。另见 How do I import the javax.servlet API in my Eclipse project?

关于java - 将 jetty 7 更新为 jetty 8 : java. lang.NoClassDefFoundError: javax/servlet/FilterRegistration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7785021/

相关文章:

java - 有没有办法截断 org.eclipse.swt.widgets.Table 项目的文本

java - 在java中读取/复制动态Web项目中的文件

java - 如何通过 SparkJava 更改 Jetty 设置?/Form too Large Exception/org.eclipse.jetty.server.Request.maxFormContentSize

java - 小服务程序测试

java - Linux top 命令报告处于等待状态的 Java ThreadPoolExecutor 线程的高 CPU 使用率(将 Jetty 服务器从 9.0.6 更新到 9.4.22 后)

scala - 自动在Scala/Lift/SBT .11中重新加载文件?

java - 使用相同端口 (80) 运行多个 Java jetty 实例

java - 如何在两次调用 Controller 方法之间保留数据?

java - JSP页面未渲染

java - 使用 SetWindowLong 覆盖 WndProc