2013-05-16 10 views
7

यह एक त्वरित सवाल है लेकिन मुझे त्वरित उत्तर नहीं मिला। अब मैं एक सर्वलेट BaseServlet है, जब उपयोगकर्ता अनुरोध नीचे यूआरएल के किसी भी:सर्वलेट @WebServlet urlPatterns

host 
host/ 
host/BaseServlet 

यह हमेशा एक ही सर्वलेट देखें और मुखपृष्ठ पर रीडायरेक्ट करना चाहिए।

जब मैं

@WebServlet({"/BaseServlet", ""}) 

सेट केवल

host/ 
host/BaseServlet 

काम करता है

अगर मैं सेट

@WebServlet({"/BaseServlet", "", "/"}) 

BaseServlet लगातार पाश में अनुरोध किया जाएगा ...

क्यों?

संपादित करें: बेसस्वर्लेट WEB-INF फ़ोल्डर में index.html को छुपाता है और यही वह है।

getServletContext().getRequestDispatcher("/WEB-INF/index.html").forward(request,response); 

सर्वलेट कल्पना कहते हैं, "केवल/चरित्र वाली एक स्ट्रिंग को इंगित करता है" डिफ़ॉल्ट "आवेदन की सर्वलेट।" तो मैं बेसस्वर्लेट को अपना डिफ़ॉल्ट होना चाहता हूं। यह क्यों काम नहीं करता है?

+0

प्रतिक्रिया के साथ आप क्या करते हैं? –

+0

कुछ प्री-प्रोसेसिंग करें, और फिर वेबपृष्ठ के साथ प्रतिक्रिया दें। – kakacii

+0

वह वेबपेज उस लूप में सर्वलेट फिर से निष्पादित कर सकता है जिसके बारे में आपने बात की थी। हमें दिखाओ। –

उत्तर

2

संपादित करें:

आप पहले से प्रक्रिया के लिए तो आप उस तरह से इसे आगे अनदेखी करेंगे अनुरोध करने के लिए यूआरएल-पैटर्न के साथ फिल्टर का उपयोग कर सकते "/ *" और डिस्पैचर सेट चाहते हैं।

अंतिम मूल्य "/" का अर्थ सभी अनुरोध है।

पर

Checkout चर्चा: http://www.coderanch.com/t/366340/Servlets/java/servlet-mapping-url-pattern

और सर्वलेट अंदर index.html के लिए एक और आगे अनुरोध उत्पन्न होता है जो भी सर्वलेट द्वारा रोक रहा है।

यदि आप @WebServlet ({"/ BaseServlet", "/"}) को आजमाते हैं जो @WebServlet ({"/ BaseServlet", "", "/"} के समान है) परिणामस्वरूप एक ही त्रुटि होगी।

आप सर्वलेट में निम्नलिखित उत्पादन बयान टाइप करके इस जाँच कर सकते हैं:

System.out.println(req.getRequestURL()); 
+0

धन्यवाद। क्षमा करें मैंने समय पर जवाब नहीं दिया लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या कह रहे हैं। सर्वलेट स्पेक कहता है "एक स्ट्रिंग जिसमें केवल/अक्षर होता है, एप्लिकेशन के" डिफ़ॉल्ट "सर्वलेट को इंगित करता है।" तो मैं बेसस्वर्लेट को अपना डिफ़ॉल्ट होना चाहता हूं। यह क्यों काम नहीं करता है? – kakacii

9
  1. आप अपने क्यू में राज्य, यदि आप निम्नलिखित चाहते हैं:

    host/ 
    host/BaseServlet 
    

    उपयोग

    @WebServlet({"/BaseServlet", ""}) 
    
  2. यदि आप वा NT के निम्नलिखित:

    host 
    

    अपने स्वागत फाइल करने के लिए इस जोड़ें (आप टिप्पणियों का उपयोग करने का स्वागत करते फ़ाइलों specifiy नहीं कर सकते हैं)

    <welcome-file-list> 
        <welcome-file>/BaseServlet</welcome-file> 
    </welcome-file-list> 
    
  3. सर्वलेट कल्पना का कहना है "एक स्ट्रिंग केवल युक्त '/'चरित्र अनुप्रयोग के "डिफ़ॉल्ट" सर्वलेट इंगित करता है। "

    लेकिन यह सीधे बाद में

    का कहना है इस मामले में सर्वलेट पथ अनुरोध URI शून्य संदर्भ पथ और पथ की जानकारी अशक्त है।

    दूसरे शब्दों में, यदि आपका यूआरएल

    host 
    

    तो सर्वलेट पथ

    "" (empty string) 
    

    किया जाएगा ताकि आप एक स्वागत योग्य फ़ाइल सूची की आवश्यकता होगी है (लेकिन index.htm [एल ] और वेबएप निर्देशिका में index.jsp, वेब-आईएनएफ नहीं, एक प्रारंभिक स्वागत फ़ाइल सूची के रूप में निहित रूप से शामिल हैं)

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