2011-09-19 17 views
10

मैं अपने web.xml में निम्नलिखित के माध्यम से सर्वलेट में 404 त्रुटियों को पुनर्निर्देशित कर रहा हूं।web.xml 404 सर्वलेट पर रीडायरेक्ट, मूल यूआरआई कैसे प्राप्त करें?

<error-page> 
    <error-code>404</error-code> 
    <location>/notFound.do</location> 
</error-page> 

मैं लॉग इन करने की जहां अनुरोध जाना कोशिश कर रहा था चाहते हैं, लेकिन मैं इसे संदर्भ शीर्ष से नहीं मिल रहा है: request.getHeader ("संदर्भ")

से पता चलता है कि 'अशक्त' अगर मैंने अभी किसी पुराने यादृच्छिक अस्तित्व वाले पृष्ठ को मारा है।

और request.getRequestURL()/request.getRequestURI() दोनों केवल अंतिम लैंडिंग सर्वलेट जानकारी (आईई,/नोटफाउंड) दिखाते हैं।

अनुरोध किया गया था कि 'खराब' पृष्ठ यूआरएल पाने का कोई तरीका?

उत्तर

18

हां, यह javax.servlet.forward.request_uri नाम के साथ अनुरोध विशेषता के रूप में उपलब्ध है, जिसे RequestDispatcher#FORWARD_REQUEST_URI द्वारा कुंजी किया गया है। त्रुटि पृष्ठ स्थान को सरल RequestDispatcher#forward() कॉल द्वारा बुलाया जाता है।

String originalUri = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI); 

या ईएल में:

<p>Original URI: ${requestScope['javax.servlet.forward.request_uri']}</p> 
+0

यह सर्वलेट-api.jar में (जो javax.servlet.RequestDispatcher प्रदान करता है) लगता है

तो, आप इसे सर्वलेट में इस प्रकार प्राप्त कर सकते हैं मेरे टोमकैट 7.0.1 9 इंस्टॉल में इनमें से कोई भी स्थिर फ़ील्ड नहीं है; केवल 'आगे' और 'शामिल' विधियों। लेकिन अगर मैं सीधे स्ट्रिंग को सीधे रखता हूं तो मैं इसे काम पर ला सकता हूं। उदाहरण के लिए, निम्नलिखित काम करता है। request.getAttribute ("javax.servlet.forward.request_uri") आपकी मदद के लिए धन्यवाद! –

+1

यह निश्चित रूप से वहां मौजूद है (javadocs देखने के लिए मेरे उत्तर में दिए गए लिंक पर क्लिक करें)। यह समस्या बताती है कि आपने अपनी प्रोजेक्ट को Servlet 2.4 प्रोजेक्ट या पुराने के रूप में पेश करने के लिए अपना आईडीई कॉन्फ़िगर किया है, या आप अपने कंपाइलटाइम क्लासपाथ को एक ढीली और पुरानी संस्करण 'servlet-api.jar' फ़ाइल पर भरोसा कर रहे हैं जो कहीं और स्थित है। क्या आप ग्रहण का उपयोग कर रहे हैं? यदि ऐसा है, तो कृपया इसे पढ़ें: http://stackoverflow.com/questions/4076601/how-do-i-import-the-javax-servlet-api-in-my-eclipse-project/4076706#4076706 – BalusC

+0

अजीब। मैंने servlet-api.jar खोल दिया और RequestDispatcher.class बाइट कोड पर एक झलक लिया, और मैं वहाँ में FORWARD_REQUEST_URI (साथ ही साथ अन्य स्थिरांक) देखता हूं। लेकिन ग्रहण के भीतर घोषणा खोलने से केवल दो विधियां दिखाई देती हैं। वे दोनों डिस्क पर एक ही जार की ओर इशारा करते हैं ... –