2013-03-10 6 views
13

मैं एक एक्सएमएल आधारित स्प्रिंग एमवीसी ऐप को जावा कॉन्फ़िगरेशन आधारित ऐप में स्थानांतरित करने का प्रयास कर रहा हूं। मैवेन में उपलब्ध विभिन्न java.servlet कक्षाओं के साथ एक मेल नहीं है। उदाहरण के लिए, कुछ addServlet() विधि प्रदान करते हैं और कुछ नहीं करते हैं।SpringServletContainerInitializer को javax.servlet में नहीं डाला जा सकता है। सेर्लेटकॉन्टेनरइनेनाइज़र

public class MyWebAppInitializer implements WebApplicationInitializer { 
    @Override 
    public void onStartup(ServletContext container) throws ServletException { 

     AnnotationConfigWebApplicationContext rootContext = 
       new AnnotationConfigWebApplicationContext(); 
     rootContext.register(JpaSandboxConf.class); 

     ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet()); 
     registration.setLoadOnStartup(1); 
     registration.addMapping("/myapp/*"); 
    } 
} 

कौन सा नहीं बल्कि अविवादास्पद लगता है:

यहाँ मेरी config वर्ग है। आदेश

container.addServlet() 

विधि पाने के लिए, मैं शामिल यह मेरा पोम में:

<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-servlet-api</artifactId> 
    <version>7.0.30</version> 
</dependency> 

मैं इस कोशिश की, लेकिन प्रवेश से ServletContext वर्ग नीचे काम नहीं किया (में है कि यह प्रदान didnot addServlet() विधि):

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>com.springsource.javax.servlet</artifactId> 
    <version>2.5.0</version> 
    <scope>provided</scope> 
</dependency> 

जब मैं का उपयोग कर इस चलाने के लिए प्रयास

mvn clean tomcat7:run 

मैं दुख प्राप्त

SEVERE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]] 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:782) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1568) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1558) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    ... 7 more 
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer 
    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1543) 
    at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1464) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1190) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:825) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:300) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 7 more 

मुझे लगता है कि एक वर्ग javax.servlet से स्प्रिंग ढांचे से आ रहा है और अन्य है, लेकिन एक बार फिर से, विधि वसंत प्रदान की कक्षा से मौजूद नहीं है (जो निराशाजनक होता है, क्योंकि यह उदाहरण वसंत 3.2 दस्तावेज के भीतर ही मौजूद है।

मैं वसंत 3.2 का उपयोग कर रहा हूं। मैं ग्रहण का उपयोग नहीं कर रहा हूं (सभी उदाहरण ग्रहण आधारित हैं, मैं इंटेलिजे में हूं)। यह एक मेवेन प्रोजेक्ट

मैं आपकी सहायता की सराहना करता हूं।

+0

के संभावित डुप्लिकेट [ServletDispatcher मेरी वसंत परियोजना में Javax.servlet.Servlet अपवाद में ढाला नहीं जा सकता है] "प्रकाशित करने के बिना मॉड्यूल की सेवा" (http://stackoverflow.com/questions/11704069/servletdispatcher-cannot-be-cast-to-javax-servlet-servlet-exception-in-my-spring) – Rugal

उत्तर

20

पोम में एक बेहतर सर्वलेट 3.0 एपीआई निर्भरता प्रविष्टि यहाँ उपलब्ध है - https://github.com/SpringSource/greenhouse/tree/servlet3, आप भी provided के रूप में गुंजाइश निशान चाहिए, अन्यथा जार अपने अंतिम युद्ध में शामिल किया जाएगा जो कंटेनर है जो द्वारा प्रदान की जार के साथ हस्तक्षेप करेगा आपके मामले में क्या हो रहा है।

10

मुझे स्प्रिंग के बिना एक ही समस्या थी, जहां mvn tomcat7:run ओपनशफ्ट पर तैनात सर्वलेट के बावजूद काम नहीं करता था। बिजू कुंजुमेन के जवाब के अनुसार, मेरे लिए समस्या यह थी कि मैं सर्वलेट-एपीआई के खिलाफ संकलन कर रहा था।

टूटी:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope> 
</dependency> 

फिक्स्ड:

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>3.0.20100224</version> 
    <scope>provided</scope> 
</dependency> 

बहुत निश्चित नहीं क्यों, लेकिन अब यह काम करता है।

2

मुझे एक ही समस्या का सामना करना पड़ रहा था बुद्धिमान ग्रेडल टॉमकैट प्लगइन। मैंने टॉमकैट संस्करण को 8 तक अपडेट किया और यह काम किया।

plugins { 
    id "com.bmuschko.tomcat" version "2.2.2" 
    id "java" 
    id "eclipse" 
    id "idea" 
    id "war" 
} 


dependencies { 
    providedCompile ('javax.servlet:javax.servlet-api:3.1.0') 
    providedCompile ('javax.servlet.jsp:jsp-api:2.2') 
    compile ('org.springframework:spring-webmvc:4.2.1.RELEASE') 

    def tomcatVersion = '8.0.27' 
    tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}", 
      "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}", 
      "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}" 

} 
1

मैं इस मुद्दे को हल करने के लिए

0

जब ग्रहण में बिलाव का उपयोग कर मैं एक ही त्रुटि का सामना करना पड़ रहा providedCompile 'javax.servlet:javax.servlet-api:3.1.0' इस्तेमाल किया।

मैं सर्वर टैब पर जाकर इस का समाधान> डबल बिलाव क्लिक करें और सही का निशान हटाएँ

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