2012-01-30 8 views
10

मैंने जावा ईई और जेटी 8.1 के लिए ग्रहण डाउनलोड किया और एक बहुत ही सरल सर्वलेट को कार्यान्वित करना चाहते हैं।ग्रहण का उपयोग कर जेटी के लिए मैं एक सरल सर्वलेट कैसे लिखूं?

जब मैं java -jar start.jar का उपयोग कर इसे शुरू करता हूं तो जेटी ठीक काम करता है।

  1. ग्रहण में, मैं choosed "नया गतिशील वेब परियोजना":

    सर्वलेट मैं ऐसा किया विकास करना।

  2. मैंने ग्रहण में "बिल्ड पथ" में jetty\lib\servlet-api-3.0.jar जोड़ा।

  3. कि परियोजना, "नई सर्वलेट", और एक सर्वलेट में जनरेट किया गया था और मैं कुछ कोड कहा:

    /** 
    * Servlet implementation class MyServlet 
    */ 
    @WebServlet("/MyServlet") 
    public class MyServlet extends HttpServlet { 
        private static final long serialVersionUID = 1L; 
    
        /** 
        * @see HttpServlet#doGet(HttpServletRequest request, 
           HttpServletResponse response) 
        */ 
        protected void doGet(HttpServletRequest request, 
           HttpServletResponse response) 
         throws ServletException, IOException { 
         PrintWriter out = response.getWriter(); 
         out.println("<html><body><h1>My Servlet</h1></body></html>"); 
        } 
    
        /** 
        * @see HttpServlet#doPost(HttpServletRequest request, 
           HttpServletResponse response) 
        */ 
        protected void doPost(HttpServletRequest request, 
           HttpServletResponse response) 
         throws ServletException, IOException { 
         // TODO Auto-generated method stub 
        } 
    
    } 
    
  4. मैं इस सामग्री के साथ WebContent\WEB-INF\web.xml में एक फ़ाइल web.xml बनाया:

    <?xml version="1.0" encoding="utf-8" ?> 
    <web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 
    <servlet> 
        <servlet-name>My Servlet</servlet-name> 
    <servlet-class>MyServlet.class</servlet-class> 
    </servlet> 
    
    <servlet-mapping> 
        <servlet-name>My Servlet</servlet-name> 
        <url-pattern>/Servlet</url-pattern> 
    </servlet-mapping> 
    

  5. मैंने संकलित .class -फाइल build\classes से 012 में कॉपी किया

  6. अब मैं प्रोजेक्ट को .war -file से jetty\webapps\MySite.war के रूप में निर्यात करना चुनता हूं।

  7. मैं java -jar start.jar साथ जेट्टी शुरू करने और जाएँ localhost:8080/MySite/Servlet लेकिन अब मैं यह संदेश प्राप्त:

    Servlet Not Initialized 
    
    javax.servlet.UnavailableException: Servlet Not Initialized 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:546) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:485) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:412) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) 
    at org.eclipse.jetty.server.Server.handle(Server.java:351) 
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:451) 
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:916) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:647) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:233) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:615) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534) 
    at java.lang.Thread.run(Thread.java:722) 
    

और अगर मैं localhost:8080/MySite/ जाएँ मैं दो फ़ोल्डर्स WEB-INF\ और आकार 0 bytes साथ META-INF\ दोनों देखते हैं।

तो यह मेरे .war जैसा दिखता नहीं है - एक्लिप्स में निर्यात किया गया।

मैं एक्लीप्से का उपयोग कर जेटी के लिए अपना सरल सर्वलेट कैसे निर्यात करूं?


मैं अब ग्रहण के लिए Jetty WTP plugin स्थापित किया है, लेकिन मैं इस सर्वलेट इसे प्रयोग नहीं चला सकते हैं:

2012-01-30 10:06:50.322:INFO:oejs.Server:jetty-8.1.0.RC4 
2012-01-30 10:06:50.353:INFO:oejdp.ScanningAppProvider:Deployment monitor C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps at interval 1 
2012-01-30 10:06:50.353:INFO:oejdp.ScanningAppProvider:Deployment monitor C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\contexts at interval 1 
2012-01-30 10:06:50.353:INFO:oejd.DeploymentManager:Deployable added: C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\contexts\MySite.xml 
2012-01-30 10:06:50.650:WARN:oejuc.AbstractLifeCycle:FAILED o.e.j.w.WebAppContext{/MySite,file:/C:/Users/Jonas/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MySite/},C:\Users\Jonas\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0/wtpwebapps/MySite: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 
java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 
    at org.eclipse.jetty.annotations.AnnotationConfiguration.createAnnotationParser(AnnotationConfiguration.java:111) 
    at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:73) 
    at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:428) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36) 
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:183) 
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:491) 
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:138) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:142) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:53) 
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:604) 
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:535) 
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:398) 
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:332) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:118) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:552) 
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:227) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:58) 
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:263) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1214) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1137) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:457) 
    at org.eclipse.jetty.start.Main.start(Main.java:600) 
    at org.eclipse.jetty.start.Main.main(Main.java:82) 
Caused by: 
java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.eclipse.jetty.annotations.AnnotationConfiguration.createAnnotationParser(AnnotationConfiguration.java:111) 
    at org.eclipse.jetty.annotations.AnnotationConfiguration.configure(AnnotationConfiguration.java:73) 
    at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:428) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36) 
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:183) 
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:491) 
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:138) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:142) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:53) 
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:604) 
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:535) 
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:398) 
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:332) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:118) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:552) 
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:227) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:58) 
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:263) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1214) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1137) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:457) 
    at org.eclipse.jetty.start.Main.start(Main.java:600) 
    at org.eclipse.jetty.start.Main.main(Main.java:82) 

उत्तर

8

सबसे पहले कोशिश करें, अपने web.xml गलत है।

सर्वलेट-श्रेणी तत्व में सर्वलेट का पूर्ण योग्य वर्ग नाम शामिल है।

वेब से।xml स्कीमा आपने लाइन 923 पर http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd का उपयोग किया था। इसलिए, लाइन 9 पर सर्वलेट-वर्ग तत्व की सामग्री MyServlet होनी चाहिए, MyServlet.class नहीं।

दूसरा, इसे साफ़ करने के लिए सर्वलेट, फ़िल्टर या श्रोता को पंजीकृत करने के लिए केवल एक ही तरीका का उपयोग करें। यदि आप उन्हें सर्वलेट कंटेनर में पंजीकृत करने के लिए एनोटेशन का उपयोग करना पसंद करते हैं। आपने वेब.एक्सएमएल में सर्वलेट और सर्वलेट-मैपिंग तत्व को बेहतर ढंग से हटा दिया था। अन्यथा, आपने जावा स्रोत में एनोटेशन को बेहतर ढंग से हटा दिया था। और तुम web.xml उपयोग करना चाहते हैं, तो आप करने के लिए 3.0

अंत में, अपने दूसरी समस्या जेट्टी डब्ल्यूटीपी ग्रहण प्लगइन से आया 2.4 से स्कीमा संस्करण अद्यतन करना चाहिए इस कोशिश कर रहा द्वारा हल किया जा सकता: jetty run error for websockets project

+0

मैंने सर्वलेट-क्लास तत्व को 'MyServlet.class' से' my.package.MyServlet' में बदल दिया और '@ WebServlet'-annotation पर टिप्पणी की और अब यह काम करता है। धन्यवाद। – Jonas

4

जिस तरह से आप Servet एक्सेस कर रहे हैं गलत हो सकता है। अगर हम निरीक्षण युद्ध आप की तैनाती कर रहे हैं MySite.war है और यूआरएल आप उपयोग कर रहे है localhost:8080\MyServlet\Servlet

साथ localhost:8080\MySite\Servlet

+0

इसके अलावा, आप कर सकते हैं एक्लीप्से के माध्यम से जेटी सर्वर से कनेक्ट करने के लिए ग्रहण में एक प्लगइन जोड़ें। नया सर्वर जोड़ने का प्रयास करें। और फिर आप सीधे ग्रहण के भीतर अपना आवेदन चला सकते हैं, युद्ध में निर्यात करने की आवश्यकता नहीं है और फिर जेटी को अलग-अलग –

+0

पर प्रकाशित करें क्षमा करें, यह मेरे द्वारा एक टाइपो था, मैं 'localhost: 8080 \ MySite \ Servlet' पर जा रहा था। यूआरआई 'लोकहोस्ट: 8080 \ MyServlet \ Servlet' रिटर्न' 404 नहीं मिला '। मुझे प्लगइन की तलाश होगी, लेकिन इसे युद्ध-फ़ाइल को निर्यात करने के लिए भी काम करना चाहिए। – Jonas

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