Обновление пристани 7 до пристани 8: java.lang.NoClassDefFoundError: javax / servlet / FilterRegistration - PullRequest
7 голосов
/ 16 октября 2011

Я пытаюсь разработать веб-сервер, внедрив причал.Так что с молой 7.3 все работало нормально.Вчера я обновил библиотеки Jetty до последней версии 8.0.3 и теперь получаю исключение, создав ServletContextHandler.

Исключение в потоке "main" java.lang.NoClassDefFoundError: javax / servlet / FilterRegistrationпо адресу org.eclipse.jetty.servlet.ServletContextHandler. (ServletContextHandler.java:126) по адресу org.eclipse.jetty.servlet.ServletContextHandler. (ServletContextHandler.java:106) Servlet.Herlet.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 version "1.6.0_22" Среда выполнения OpenJDK (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~ 11.04.1) Виртуальная 64-битная серверная виртуальная машина OpenJDK (сборка 20.0-b11, смешанный режим)

У кого-нибудь есть предложения?

Ответы [ 2 ]

10 голосов
/ 16 октября 2011

Класс javax.servlet.FilterRegistration был представлен в Servlet 3.0. Это исключение предполагает, что у вас в библиотеке времени выполнения есть еще библиотеки более старой версии API сервлета, которые получили приоритет при загрузке классов. Например, случайно выбранный из Интернета файл servlet-api.jar в папке /WEB-INF/lib вашего веб-приложения или, возможно, в папке /lib JRE. Вы должны удалить те библиотеки для сервлет-контейнеров, которые находятся где-то еще в пути к классам, а не в самой целевой среде выполнения.

Если вы сделали это, чтобы обойти проблемы компиляции, то вместо этого вы должны взять целевые библиотеки времени выполнения в classpath. Например, в Eclipse вы можете сделать это в разделе Target Runtime свойств проекта. См. Также Как импортировать API javax.servlet в мой проект Eclipse?

0 голосов
/ 15 июня 2016

Когда вы используете SBT, класс FilterRegistration присутствует в 3.0, а также, если вы используете JETTY или Java 8, этот JAR 2.5 автоматически добавляется в качестве зависимости,

Исправление: в JAR Servlet-api-2.5 был беспорядокЯ решил эту проблему, добавив в зависимости jar servlet-api-3.0,

enter image description here

...