2010-10-18 13 views
10

में रीडायरेक्ट न करें मेरे पास टॉमकैट में एक स्प्रिंग एमवीसी ऐप परोसा गया है। उपयोगकर्ता एक पृष्ठ है कि नहीं मिला प्रवेश करती है, यह मेरा डिफ़ॉल्ट 404 पृष्ठ को प्रदर्शित करता है, के रूप में web.xml में सेटकस्टम 404 पेज को आगे कैसे बनाएं, टॉमकैट

<error-page> 
    <error-code>404</error-code> 
    <location>/errors/404/</location> 
</error-page> 

समस्या यह है कि उपयोगकर्ता http://mydomain/bad/url

को जाता है अगर यह पुनः निर्देशित किया जाता है http://mydomain/errors/404/

यह परेशान है, क्योंकि यदि कोई उपयोगकर्ता गलत URL में टाइप करता है तो यह देखना मुश्किल होता है कि गलती क्या थी और इसे सही करें।

404 त्रुटि के बाद, मैं इसे मूल यूआरएल रखना चाहता हूं, लेकिन त्रुटि पृष्ठ प्रदर्शित करता हूं। (यानी एक फॉरवर्ड, रीडायरेक्ट नहीं)। यह मेरी धारणा है कि अधिकांश वेब सर्वर कैसे काम करते हैं। क्या यह संभव है?

+0

अपने उद्देश्य मूल URL जो 404 की वजह से, अभ्यस्त req.getAttribute ("javax.servlet.error.request_uri") आपके लिए काम पाने के लिए है, तो? – JoseK

+0

अच्छी टिप - इसके बारे में नहीं पता था। लेकिन मेरा लक्ष्य उपयोगकर्ता-मित्रता है। मैं चाहता हूं कि यूआरएल खराब मूल्य पर बने रहें ताकि उपयोगकर्ता इसे देख सकें, लेकिन त्रुटि पृष्ठ वितरित करें। –

+0

क्या आप अपने उत्तर देंगे और प्रश्न बंद करेंगे? सादर। – mschonaker

उत्तर

4

मैं काफी समझ में नहीं आता क्यों इस तरह से यह करता है काम करता है, लेकिन ...

मुझे पता चला है कि आप स्थिति कोड सेट और एक खाली प्रतिक्रिया है (या आप के लिए अग्रेषित करने के लिए कोशिश करता है, तो बस आगे

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND); 

लेकिन अगर आप बिलाव पूछना पेज भेजने के लिए, यह और मूल राज्य में URL छोड़ देते हैं, के रूप में मैं के लिए देख रहा हूँ: त्रुटि पृष्ठ), बिलाव त्रुटि पृष्ठ पर रीडायरेक्ट करेगा।

((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND); 
((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND); 
+0

आपको सिर्फ sendError() को कॉल करना चाहिए। यह स्थिति सेट करता है। सेटस्टैटस() का उपयोग केवल तभी करें जब आप सामग्री भी प्रदान कर रहे हों। –

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