2011-10-16 10 views
7

im tratando de desarrollar un servidor web mediante la incorporación de embarcadero. Así que con el muelle 7.3 todo funcionó bien. Ayer actualicé las libarias del embarcadero a la versión más nueva 8.0.3 y ahora recibo una excepción creando un ServletContextHandler.Actualización de muelle 7 al muelle 8: java.lang.NoClassDefFoundError: javax/servlet/FilterRegistration

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)

Así que lo que hago es:

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(); 
     } 


} 

Así que la línea que lanza la excepción es:

ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS); 

Im usando Ubuntu 11.04 con:

versión de Java OpenJDK " 1.6.0_22 " OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1 ~ 11.04.1) OpenJDK 64 bits del servidor VM (build 20.0-b11, modo mixto)

¿Alguien tiene una sugerencia?

Respuesta

10

The javax.servlet.FilterRegistration class se introdujo en Servlet 3.0. Esta excepción sugiere que todavía tiene bibliotecas de una versión anterior de la API de Servlet en su classpath de tiempo de ejecución, que tiene precedencia en la carga de clases. Por ejemplo, un azar de la Internet que han seleccionado servlet-api.jar archivo en /WEB-INF/lib carpeta de su aplicación web o tal vez en la carpeta del JRE /lib. Debe eliminar las bibliotecas específicas de servletcontainer que están ubicadas en otro lugar en el classpath que en el propio tiempo de ejecución de destino.

Si hizo esto para eludir los problemas de compilación, entonces se debe, en cambio han tomado las bibliotecas de tiempo de ejecución de la diana en la ruta de clase. En, por ejemplo, Eclipse, puede hacerlo en Target Runtime sección de propiedades del proyecto. Ver también How do I import the javax.servlet API in my Eclipse project?

+1

gracias por su answere, pero todavía estoy preguntando donde el API servlet 3.0 está disponible para descarga? ¿La actualización Java SE JDK 1.6 22 (openjdk) no proporciona Servlet 3.0? Estoy confundido ... – sockeqwe

+1

Ya lo has descargado. Jetty 8 es una implementación de Servlet 3.0 API. Solo necesita entender que las API de Java EE son ** abstractas ** (es decir, existen en papel solo como especificaciones y javadocs) y que los contenedores concretos de Java EE/Servlet como Jetty, Tomcat, Glassfish, JBoss AS, etc. .. son las implementaciones ** concretas ** (es decir, contienen el código y las bibliotecas). – BalusC

+1

Bien, fue mi error de razonamiento. He incluido todas las librerias embarcadero, pero la excepción sigue ahí – sockeqwe

0

Cuando se utiliza SBT, clase FilterRegistration está presente en 3.0 y también si se utiliza muelle o Java 8 este JAR 2.5 añade automáticamente como dependencia,

Fix: servlet-api-2,5 frasco estaba el desorden allí, resuelve este problema mediante la adición de servlet-api-3,0 frasco en las dependencias,

enter image description here

Cuestiones relacionadas