2011-10-16 10 views
7

मैं जेटी एम्बेड करके एक वेब सर्वर विकसित करने की कोशिश कर रहा हूं। तो जेटी 7.3 के साथ सब कुछ ठीक काम किया। कल मैंने जेटी लिब्री को नवीनतम संस्करण 8.0.3 में अपडेट किया था और अब मुझे ServletContextHandler बनाकर अपवाद मिलता है।जेटी 7 को जेटी 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)

तो मैं क्या है:

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 जावा संस्करण " 1.6.0_22 " ओपनजेडीके रनटाइम पर्यावरण (आईसीएसटीए 6610.2) (6 बी 22-1.10.2-0ubuntu1 ~ 11.04.1) ओपनजेडीके 64-बिट सर्वर वीएम (बिल्ड 20.0-बी 11, मिश्रित मोड)

क्या किसी के पास कोई सुझाव है?

उत्तर

10

The javax.servlet.FilterRegistration class Servlet 3.0 में पेश किया गया था। यह अपवाद बताता है कि आपके पास अभी भी आपके रनटाइम क्लासपाथ में पुराने सर्विसलेट एपीआई संस्करण के पुस्तकालय हैं जिन्हें क्लासलोडिंग में प्राथमिकता मिली है। उदाहरण के लिए इंटरनेट से यादृच्छिक रूप से servlet-api.jar फ़ाइल को /WEB-INF/lib फ़ाइल में अपने वेबएप के फ़ोल्डर या शायद जेआरई /lib फ़ोल्डर में चुना गया। आपको उन servletcontainer-विशिष्ट पुस्तकालयों को हटा देना चाहिए जो लक्ष्य रनटाइम के मुकाबले क्लासपाथ में कहीं और बैठे हैं।

यदि आपने संकलन समस्याओं को रोकने के लिए ऐसा किया है, तो आपको क्लासपाथ में लक्ष्य रनटाइम की लाइब्रेरी लेनी चाहिए। उदाहरण के लिए ग्रहण, आप इसे परियोजना के गुणों के लक्ष्य रनटाइम अनुभाग में कर सकते हैं। इन्हें भी देखें How do I import the javax.servlet API in my Eclipse project?

+1

अपने answere के लिए धन्यवाद, लेकिन im अभी भी सोच रहा जहां सर्वलेट 3.0 एपीआई डाउनलोड करने के लिए उपलब्ध है? क्या जावा एसई जेडीके 1.6 अपडेट 22 (ओपनजेडीके) सर्वलेट 3.0 प्रदान नहीं करता है? मैं उलझन में ... – sockeqwe

+1

आप इसे पहले ही डाउनलोड कर चुके हैं। जेटी 8 एक सर्वलेट 3.0 एपीआई कार्यान्वयन है। आपको केवल यह समझने की आवश्यकता है कि जावा ईई एपीआई ** अमूर्त ** (यानी वे केवल चश्मा और जावाडॉक्स के रूप में पेपर में मौजूद हैं) और जेटी, टॉमकैट, ग्लासफ़िश, जेबॉस एएस इत्यादि जैसे ठोस जावा ईई/सर्वलेट कंटेनर हैं .etc .. ** ठोस ** कार्यान्वयन हैं (यानी वे कोड और पुस्तकालय शामिल हैं)। – BalusC

+1

ठीक है, यह तर्क में मेरी त्रुटि थी। मैंने सभी जेटी लिबरियां शामिल की हैं, लेकिन अपवाद अभी भी – sockeqwe

0

आप एसबीटी उपयोग करते हैं, FilterRegistration वर्ग 3.0 में मौजूद है और यदि आप घाट या जावा 8 इस जार 2.5 यह स्वचालित रूप से निर्भरता के रूप में कहते हैं, का उपयोग

फिक्स: सर्वलेट-api-2.5 जार था गंदगी, मैं निर्भरता में सर्वलेट-api-3.0 जार जोड़कर इस समस्या का समाधान हो,

enter image description here

संबंधित मुद्दे