मैं स्प्रिंग 3.1 और एम्बेडेड जेट्टी 8 सर्वर का उपयोग कर किसी भी XML कॉन्फ़िगरेशन के बिना एक सरल वेबपैप बनाने की कोशिश कर रहा हूं।स्प्रिंग 3.1 वेब ऐप्लिकेशंसइनाइज़र और एंबेडेड जेटी 8 एनोटेशन कॉन्फ़िगरेशन
हालांकि, मैं जेटी को स्प्रिंग वेबएप्लिकेशंसइनाइज़र इंटरफ़ेस के मेरे कार्यान्वयन को पहचानने के लिए संघर्ष कर रहा हूं।
परियोजना संरचना:
src
+- main
+- java
| +- JettyServer.java
| +- Initializer.java
|
+- webapp
+- web.xml (objective is to remove this - see below).
प्रारंभकर्ता ऊपर वर्ग का एक सरल कार्यान्वयन है WebApplicationInitializer:
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.springframework.web.WebApplicationInitializer;
public class Initializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println("onStartup");
}
}
इसी तरह JettyServer एक एम्बेडेड जेट्टी सर्वर का एक सरल दिया गया है:
import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;
public class JettyServer {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
WebAppContext webAppContext = new WebAppContext();
webAppContext.setResourceBase("src/main/webapp");
webAppContext.setContextPath("/");
webAppContext.setConfigurations(new Configuration[] { new AnnotationConfiguration() });
webAppContext.setParentLoaderPriority(true);
server.setHandler(webAppContext);
server.start();
server.join();
}
}
मेरे समझ है कि स्टार्टअप पर जेट्टी ServletContainerInitializer की एनोटेट कार्यान्वयन के लिए स्कैन करने AnnotationConfiguration प्रयोग करेंगे; यह प्रारंभकर्ता और उस में तार ...
हालांकि, खोजना चाहिए जब मैं जेट्टी सर्वर (ग्रहण के भीतर से) शुरू मैं कमांड लाइन पर निम्न देखें:
2012-11-04 16:59:04.552:INFO:oejs.Server:jetty-8.1.7.v20120910
2012-11-04 16:59:05.046:INFO:/:No Spring WebApplicationInitializer types detected on classpath
2012-11-04 16:59:05.046:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/Users/duncan/Coding/spring-mvc-embedded-jetty-test/src/main/webapp/}
2012-11-04 16:59:05.117:INFO:oejs.AbstractConnector:Started [email protected]:8080
महत्वपूर्ण बिट यह है:
No Spring WebApplicationInitializer types detected on classpath
ध्यान दें कि src/मुख्य/जावा ग्रहण में एक स्रोत फ़ोल्डर के रूप में परिभाषित किया गया है, इसलिए classpath पर होना चाहिए। यह भी ध्यान रखें कि डायनामिक वेब मॉड्यूल फ़ैसैट 3.0 पर सेट है।
मुझे यकीन है कि एक साधारण स्पष्टीकरण है, लेकिन मैं पेड़ के लिए लकड़ी को देखने के लिए संघर्ष कर रहा हूं! मुझे लगता है कुंजी निम्न पंक्ति के साथ है:
...
webAppContext.setResourceBase("src/main/webapp");
...
यह web.xml (देखें नीचे) का उपयोग कर एक 2.5 सर्वलेट के साथ समझ में आता है, लेकिन जब AnnotationConfiguration का उपयोग कर यह क्या किया जाना चाहिए?
एनबी: सब कुछ सही ढंग से करता है, तो मैं निम्नलिखित करने के लिए विन्यास बदलने के ऊपर आग:
...
webAppContext.setConfigurations(new Configuration[] { new WebXmlConfiguration() });
...
इस मामले में यह src/मुख्य/webapp तहत web.xml पाता है और तार करने के लिए इसे इस्तेमाल करता है का उपयोग कर सर्वलेट सामान्य रूप से DispatcherServlet और एनोटेशन कॉनफिग वेब ऐप्लिकेशंस कॉन्टेक्स्ट (पूरी तरह से वेब एप्प्लिकेशनइनेनाइज़र उपरोक्त कार्यान्वयन) को छोड़कर।
यह एक classpath समस्या की तरह बहुत ज्यादा लगता है, लेकिन मैं समझने के लिए काफी है कि कैसे जेट्टी WebApplicationInitializer के कार्यान्वयन के साथ सहयोगियों ही संघर्ष कर रहा हूँ - किसी भी सुझाव सबसे की सराहना की होगी!
वसंत 3.1.1 जेट्टी 8.1.7 एसटीएस 3.1.0
यह काम प्रतीत होता है। क्या आपने जेटी को सूचित करने या पैच में भेजने के बारे में सोचा है? – Jason
विस्तृत उत्तर के लिए बहुत धन्यवाद - वही था जो मैं ढूंढ रहा था। एक खेल था और अब जेटी और एक वसंत परिप्रेक्ष्य दोनों से चीजें कैसे काम करती हैं, इसकी एक बहुत स्पष्ट समझ है। निश्चित रूप से जेटी के भीतर ठीक करने और एक पैच जमा करने के लिए देखेंगे। – Duncan
@ डंकन: क्या जेटी के साथ कभी भी एक पैच/मुद्दा दायर किया गया था? –