2010-10-24 13 views
7

कुछ हद तक आलसी होने के नाते, मुझे यह जानकर खुशी हुई कि मैं नई -> कक्षा जाने के बजाय नया -> सर्वलेट जाकर और फिर कक्षा को सर्वलेट में संपादित करने के बजाय नया सर्वलेट स्रोत कोड बना सकता हूं।ग्रहण में Servlets क्यों बना रहा है मेरे web.xml तोड़ रहा है?

हालांकि, मैंने पाया है कि हर बार जब मैं एक्लिप्स में एक नया सर्वलेट बनाता हूं, ग्रहण मेरे web.xml को संशोधित करता है। (। LINEBREAKS मेरा):

विशेष रूप से, यह करने के लिए शीर्ष तत्व को संशोधित करता

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
    xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    id="WebApp_ID" version="2.4"> 

यह आवश्यक रूप से बुरा नहीं लगता है, लेकिन फिर यह javaee डालकर विभिन्न उप तत्वों को संशोधित करता है ": "उनके नाम के सामने, यह इंगित करने के लिए कि ये तत्व उस नामस्थान में हैं।

उदाहरण के लिए, यह परिवर्तन

<display-name>ShowLifecycles</display-name> 

को
<javaee:display-name>ShowLifecycles</javaee:display-name> 

के बाद जो ग्रहण तब के बारे में सभी तत्वों को यह संशोधित शिकायत करता है, मेरे जैसे अंकन दे रही है:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'javaee:display-name'. One of '{"http:// 
java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://java.sun.com/xml/ns/ 
j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://java.sun.com/xml/ns/j2ee":context-param, "http:// 
java.sun.com/xml/ns/j2ee":filter, "http://java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/ 
j2ee":listener, "http://java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http:// 
java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, "http://java.sun.com/xml/ns/ 
j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, "http://java.sun.com/xml/ns/j2ee":jsp-config, "http:// 
java.sun.com/xml/ns/j2ee":security-constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/ 
j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/j2ee":ejb-ref, "http:// 
java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/j2ee":service-ref, "http://java.sun.com/xml/ns/ 
j2ee":resource-ref, "http://java.sun.com/xml/ns/j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message- 
destination-ref, "http://java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale- 
encoding-mapping-list}' is expected. 

बनाने के इससे भी बदतर बात है, जब मैं "javaee:" को हटाने के लिए खोजने और प्रतिस्थापित करने का उपयोग करता हूं जो फ़ाइल को झुकाता है, ग्रहण अभी भी इनके बारे में शिकायत करता है भले ही वे वहां नहीं हैं। इन शिकायतों को दूर करने के लिए मुझे पूरी शेष फ़ाइल को अपने आप शीर्ष पर कॉपी और पेस्ट करना होगा।

मुझे यकीन है कि ग्रहण उपयोगी होने की कोशिश कर रहा है, इस नामस्थान की कुछ इच्छा या आवश्यकता की उम्मीद कर रहा है। मैं या तो दो चीजों में से एक कैसे कर सकता हूं:

  1. इसे ऐसा करना बंद करें?

  2. जो कुछ भी करने का प्रयास कर रहा है उसका लाभ उठाएं, और मेरे खिलाफ मेरे लिए काम करें?

+0

ग्रहण विज़ार्ड से बचने के लिए यह एक अच्छा कारण है –

+0

क्या आप सर्वलेट 3.0 का उपयोग कर सकते हैं? – Bozho

+0

@ बोझो - जब मैं servlets की बात करता हूं तो मैं नौसिखिया हूं। मैं शायद सर्वलेट 3.0 का उपयोग कर सकता हूं, लेकिन मुझे यह भी पता नहीं है कि मैं वर्तमान में किस संस्करण का उपयोग कर रहा हूं (मुझे लगता है कि नवीनतम) या किसी भिन्न संस्करण का उपयोग करने के लिए इसे कैसे बताना है। –

उत्तर

11

मैंने इसे पहले कभी नहीं देखा है, लेकिन यह इंगित करता है कि आपकी ग्रहण परियोजना वास्तव में गड़बड़ हो गई है। कम से कम web.xml रूट घोषणा का कोई अर्थ नहीं है। यह सर्वलेट 2.4 और 2.5 विनिर्देशों के मिश्रण की तरह दिखता है। शायद ग्रहण भ्रमित हो रहा है क्योंकि रूट नेमस्पेस (xmlns) सर्वलेट 2.4 एक (j2ee यूआरआई के साथ) पर इंगित कर रहा है, जबकि वेब प्रोजेक्ट स्वयं सर्वलेट 2.5 या नए के रूप में सेट है (जिसे javaee यूआरआई के साथ उपयोग करना चाहिए)।

इसके अलावा, web.xml ज़रूरत से ज़्यादा बनाता है जब अपने वेब परियोजना निर्माण के दौरान 3.0, डिफ़ॉल्ट कोई web.xml नई सर्वलेट 3.0 एनोटेशन @WebServlet, @WebFilter तरह की वजह से ग्रहण द्वारा उत्पन्न हो जाएगा, आदि द्वारा सर्वलेट के लिए सेट है ..। जब आप द्वारा नए सर्वलेट बनाते हैं तो नया> सर्वलेट, ग्रहण पहले से ही उन टिप्पणियों को स्वत: उत्पन्न करेगा। शायद आपने गलत जानकारी के आधार पर web.xml स्वयं को बनाने का प्रयास किया है।

यदि आवश्यक हो तो मैं कुछ कोड बैकअप करने का सुझाव दूंगा, पूरी परियोजना को फेंक दूंगा और उचित सेटिंग्स के साथ एक नया बनाउंगा और web.xml रूट घोषणा को स्पर्श न करें।

यह मानते हुए कि आप नवीनतम ग्रहण संस्करण का उपयोग कर रहे हैं, जावा ईई डेवलपर्स के लिए Helios SR1, rightclick ग्रहण के परियोजना एक्सप्लोरर, नया> गतिशील वेब परियोजना चुनते हैं और सिर्फ इस परियोजना का नाम भरने और सब कुछ डिफ़ॉल्ट रहते हैं। अंतिम चरण तक अगला पर क्लिक करें और फिर पर क्लिक करें eclipse उत्पन्न करने के लिए web.xml परिनियोजन वर्णनकर्ता चेकबॉक्स जेनरेट करें। रूट घोषणा इस तरह दिखनी चाहिए:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
+0

मुझे लगता है कि आपने इसे बुलाया है। जेएसपी पर मेरी पुस्तक बहुत पुरानी है और मैंने देखा कि कुछ अन्य ट्यूटोरियल बहुत पुराने थे। मैं web.xml बना रहा था क्योंकि वे सभी ने मुझे निर्देश दिया था। मैंने सर्वलेट ग्रहण में एनोटेशन को देखा और कहीं पढ़ा कि इसका मतलब है कि वेब.एक्सएमएल की आवश्यकता नहीं थी, लेकिन फिर पुराने सर्विसेज पुराने लोगों के लिए ब्रेकिंग वेब.एक्सएमएल को ठीक करने के बाद जोड़ा जा रहा था। मैं इसे आगे बढ़ने की कोशिश करूंगा। :-) –

+0

यह काम करता है, एक चीज़ को छोड़कर: मुझे टैग में servlets को कैसे शामिल करना चाहिए? उदाहरण के लिए, अब मेरे पास टेबलस्वर्लेट है, लेकिन अगर मैं जेएसपी में डालता हूं, तो मुझे यह त्रुटि मिलती है: इस पंक्ति में कई एनोटेशन पाए जाते हैं: \t - फ्रैगमेंट "/TableServlet "/ उम्मीद पथ/SamsTeachYourselfJSP_2/ \t WebContent पर नहीं मिला था TableServlet \t - टुकड़ा"/TableServlet "उम्मीद पथ/SamsTeachYourselfJSP_2/ \t WebContent/TableServlet –

+1

एक और समस्या है कि में नहीं मिला था। ग्रहण का जेएसपी/ईएल सिंटैक्स सत्यापनकर्ता एक [महाकाव्य विफल] है (https://bugs.eclipse.org/bugs/buglist.cgi?quicksearch=jsp+el)। बस अनदेखा करें और इसे चलाएं। आप देखेंगे कि यह सिर्फ काम करता है। आप एक्लिप्स प्राइस में उस भयानक जेएसपी सत्यापनकर्ता को अक्षम कर सकते हैं। संबंधित प्रश्न: http://stackoverflow.com/questions/1790749, http://stackoverflow.com/questions/2268153, http://stackoverflow.com/questions/2975168, आदि.etc .. – BalusC

1

मुझे एक समान समस्या थी। मैंने पुराने वेब टॉमकैट 6/जावा 6 से टॉमकैट 7/जावा 7 तक एक वेब ऐप लाया। मैंने मौजूदा वेब.एक्सएमएल बॉडी को नए 3.0 वेब.एक्सएमएल में कॉपी और पेस्ट किया। सब कुछ ठीक था जब तक कि मैंने एक सर्वलेट जोड़ा जो कि init-param, display-name, वर्णन और लोड-ऑन-स्टार्टअप पैरामीटर था। ग्रहण ने इन पैरा को "अमान्य सामग्री ..." के साथ विभाजित कर दिया। स्टैक ओवरफ्लो के लिए धन्यवाद, मैंने पाया कि लोड-ऑन-स्टार्टअप को इनिट-पैराम्स के बाद आना पड़ा था, लेकिन वे केवल आरटीएफएम के बारे में जानते थे। मेरे अन्य पैरा अभी भी टूटने के रूप में ध्वजांकित थे। यह वही है web.xml हेडर की तरह जब यह टूट गया था देखा है:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
version="3.0"> 

मैं करने के लिए एनएस/J2EE और वेब app_2_5.xsd DTDs बदल गया है, और Ecliupse शिकायत बंद कर दिया। लेकिन इसकी 2014 और हम जल्द ही टॉमकैट 8 पर जा रहे हैं। तो मैंने कड़ी मेहनत की और डॉक्स को ढूंढ लिया।

  1. जेईई: descriptionGroup = 3 पैरामीटर के किसी भी कॉम्बो: विवरण, प्रदर्शन-नाम, आइकन
  2. सर्वलेट नाम
  3. चुना है 1: सर्वलेट वेब ऐप्लिकेशन में 3.0 मानकों इस क्रम में होना जरूरी वर्ग या jsp फ़ाइल init-पैरामीटर के
  4. n संख्या
  5. लोड-ऑन-स्टार्टअप
  6. विकल्प: सक्षम, asynch समर्थित, रन के रूप में, सुरक्षा-भूमिका रेफरी, बहुखण्डीय-config

एक बार जब मैं अपने पैरा को क्रम में डालता हूं, तो एक्लिप्स एनएस/जावावी और वेब-एप_3_0.एक्सएसडी से खुश था।

+0

[] (http://stackoverflow.com/questions/5175034/strange-web-xml-error) समस्या के लिए मूल स्टैक ओवरफ्लो फ़िक्स है। यह वह जगह है जहां मुझे [जीई की परिभाषा: वर्णन समूह] (http://schemas.stylusstudio.com/j2ee50/n7e2eaf6a/group_descriptionGroup.html) मिला। (उर्फ सर्वलेट टाइप) पर शीर्ष स्तर डीटी [वेब-कॉमन_3_1.एक्सएसडी] (http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-common_3_1.xsd) –

0

यकीन web.xml फ़ाइल टैग टैग

<?xml version="1.0" encoding="UTF-8"?> 

के बाद मेरे मामले में मैं था DOCTYPE टैग और web.xml से DOCTYPE टैग को हटाने मुझे इस त्रुटि को मंजूरी दे दी से प्रारंभ होता है,

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >

1

"servlet" टैग के तहत पहले तत्व के रूप में "प्रदर्शन-नाम" को ले जाएं, सत्यापन त्रुटि दूर जाना चाहिए।

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