2011-11-17 13 views
6

ठीक त्रुटि संदेश प्रदर्शित नहीं करता है तो मैं एक बहुत सरल एक सर्वलेट का उपयोग कर webapp है और कुछ मामलों में मैं भेजने और वापस की तरह ग्राहक के लिए त्रुटि:बिल्ला जब sendError सर्वलेट से इस्तेमाल किया

response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Did not specify parameter xyz"); 

इस में ठीक काम करता है सामान्य लेकिन टॉमकैट (6.0.33 और जावा 1.6.0_26-b03) ऊपर से दिए गए त्रुटि संदेश को नहीं दिखाता है।

यदि मैं ग्लासफ़िश जैसे किसी भिन्न कंटेनर पर एप्लिकेशन चलाता हूं तो दिया गया संदेश दिखाया जाता है।

तो, उदाहरण के उत्पादन ....

Tomcat: 
400 - Bad Request 

Glassfish: 
400 - Did not specify parameter xyz 

यह बिल्ला कॉन्फ़िगर करने के लिए एक ही तरह से व्यवहार करने के लिए संभव है?

+0

क्या आपके पास अपनी परियोजना में एक कस्टम त्रुटि पृष्ठ सेट है? – Mechkov

+0

नहीं; कोई कस्टम त्रुटि पृष्ठ नहीं। यह अभी भी कस्टम HTML पृष्ठ दिखाता है जो टॉमकैट डिफ़ॉल्ट रूप से प्रदर्शित होता है, और जो संदेश मैं भेजता हूं वह वहां दिखाई देता है। ग्लासफ़िश एक ही तरीके से व्यवहार करता है; लेकिन यह संदेश को मूल त्रुटि संदेश के रूप में भी उपयोग करता है जो लौटाया जाता है जबकि टॉमकैट अभी भी 'खराब अनुरोध' का उपयोग करता है। – rat

+0

मैं पूछ रहा था क्योंकि टॉमकैट 6.0.एक्स में एक कस्टम त्रुटि पृष्ठ शामिल होने पर "sendError" के साथ कस्टम संदेश भेजने में विफल होने से संबंधित एक बग था। – Mechkov

उत्तर

8

ठीक है कुछ और खुदाई मैं समाधान यहां पाया के बाद: How to properly send an HTTP message to the client

आप स्थापित करने की आवश्यकता:

+०१२३५१६४१०
org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = true 
/conf/catalina.properties में

यह आपको हेडर 'ठीक से' में सेट त्रुटि संदेश :)

+0

'टोमकैट 8.5.x' और नए के लिए काम नहीं करता है –

0

हो सकता है आप 400.jsp की तरह एक कस्टम त्रुटि पृष्ठ बनाने के लिए, चाहते हैं, और उपयोगकर्ता के रूप में

<error-page> 
    <error-code>400</error-code> 
.. . path to the page (sorry I don't remember the exact syntax) 
</error-page> 

web.xml में यह जगह इस त्रुटि पृष्ठ पर आप इस संदेश को प्राप्त कर सकते हैं और दर्शाते हैं कि यह । कस्टम एरर पृष्ठ के लाभ यह है कि आप अपने खुद के सीएसएस शैलियों, अपनी साइट विशिष्ट मार्कअप, आदि लागू कर सकते हैं

युपीडी: यदि आप कस्टम अं पृष्ठों पसंद नहीं है: हम में इस कोड का इस्तेमाल किया त्रुटि और संदेश के साथ उपयोगकर्ता जवाबी कार्रवाई के लिए वापस भेजने के लिए RESTful API

return javax.ws.rs.core.Response.status(Status.BAD_REQUEST).entity("My message here).build(); 
+1

एक कस्टम त्रुटि पृष्ठ वास्तव में सही समाधान नहीं है। सर्वलेट एक रीस्टफुल एपीआई परोसता है, इसलिए मैं बस इसे पोस्ट कर रहा हूं, उपयोगकर्ता को वास्तव में किसी त्रुटि पृष्ठ पर रीडायरेक्ट नहीं किया जाता है। तो जब मैं एक सार्थक संदेश दिखाने की बजाय एक पोस्ट पर एक त्रुटि वापस प्राप्त करता हूं तो टॉमकैट के खिलाफ इसे 'खराब अनुरोध' मिलता है :( – rat

+0

तो उपयोगकर्ता को अच्छा त्रुटि पृष्ठ पर रीडायरेक्ट करने में समस्या क्या है? यदि आप इसे निर्दिष्ट करते हैं तो यह स्वचालित रूप से किया जाएगा web.xml में, – javagirl

+0

लिखने के लिए कोई अन्य कोडिंग नहीं है यह एक एपीआई एक सामान्य वेबसाइट नहीं है। एपीआई रीडायरेक्ट नहीं करते हैं। अन्य क्लाइंट-एप्लिकेशन एपीआई को रीस्टफुल कॉल करते हैं और प्रतिक्रियाओं को उचित तरीके से संभालते हैं। टोमकैट इस तरह से व्यवहार कर रहा है उन्हें एपीआई से लौटाए गए सही त्रुटि संदेश नहीं मिल रहे हैं। – rat

0

बिलाव नहीं रह गया हैUSE_CUSTOM_STATUS_MSG_IN_HEADER संपत्ति का समर्थन करता है भेजने के लिए बिल्ला कारण बनता है। version 8.5.0 से

चैंज:

आरएफसी 7230 कहा गया है कि ग्राहकों के कारण वाक्यांशों को नजरअंदाज करना चाहिए HTTP में/1.1 प्रतिक्रिया संदेशों। चूंकि कारण वाक्यांश वैकल्पिक है, इसलिए टोमकैट संख्या इसे भेजता है। नतीजतन सिस्टम प्रॉपर्टी org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER अब का उपयोग नहीं किया गया है और इसे हटा दिया गया है। (मार्क)

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