2012-08-08 4 views
10

क्या होता है यदि मेरे पास web.xml में दो सर्वलेट मैपिंग हैं जो अनुरोध से मेल खाते हैं? क्या यह सबसे विशिष्ट चुनता है?क्या होता है यदि मेरे पास web.xml में दो सर्वलेट मैपिंग हैं जो अनुरोध से मेल खाते हैं?

उदाहरण के लिए यदि मेरे पास निम्न xml है और कोई अनुरोध आता है ..../कुछ ऐसा होता है, जबकि यह somethingservlet या everything_else servlet पर जाता है?

<servlet-mapping> 
     <servlet-name>something</servlet-name> 
     <url-pattern>/something</url-pattern> 
    </servlet-mapping>  

    <servlet-mapping> 
    <servlet-name>everything_else</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
+0

'/ *' पर एक सर्वलेट होने के कारण एक अजीब डिजाइन है। शायद यह वास्तव में एक फिल्टर होना चाहिए? – BalusC

उत्तर

11

पहला सफल मैच का उपयोग किया जाएगा।

सर्वलेट कंटेनर द्वारा अनुमोदित कुछ मैपिंग नियम हैं। पढ़ें सर्वलेट 2.5 विनिर्देश अध्याय SRV.11:

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

  1. कंटेनर सर्वलेट के रास्ते पर अनुरोध के रास्ते की एक सटीक मिलान की तलाश करेगा। एक सफल मैच सर्वलेट का चयन करता है।
  2. कंटेनर बार-बार पथ-उपसर्ग से मिलान करने का प्रयास करेगा। पथ पेड़ को एक समय में एक निर्देशिका में कदम से, '/' वर्ण का उपयोग करके पथ विभाजक के रूप में किया जाता है। सबसे लंबा मैच चयनित सर्वलेट निर्धारित करता है।
  3. यदि URL पथ में अंतिम सेगमेंट में एक एक्सटेंशन (उदा। .jsp) है, तो servlet कंटेनर एक्सटेंशन के लिए अनुरोधों को संभालने वाले सर्वलेट से मिलान करने का प्रयास करेगा। अंतिम '।' वर्ण के बाद अंतिम खंड के हिस्से के रूप में एक एक्सटेंशन को परिभाषित किया गया है।
  4. यदि पिछले तीन नियमों में से कोई भी सर्वलेट मैच में न हो, तो कंटेनर अनुरोधित संसाधन के लिए उचित सामग्री की सेवा करने का प्रयास करेगा। यदि एप्लिकेशन के लिए "डिफ़ॉल्ट" सर्वलेट परिभाषित किया गया है, तो इसका उपयोग किया जाएगा।
संबंधित मुद्दे

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