मुझे हाल ही में सर्वलेट द्वारा उत्पन्न वेबसाइटों के एन्कोडिंग के साथ एक समस्या थी, ऐसा हुआ कि अगर टोलेट्स के तहत सर्वलेट तैनात किए गए थे, लेकिन जेटी के तहत नहीं। मैं इसके बारे में अनुसंधान का एक छोटा सा था और निम्नलिखित सर्वलेट को समस्या को सरल बनाया:टोमकैट द्वारा प्रतिक्रिया में कोई एन्कोडिंग सेट क्यों नहीं है? मैं इसके साथ कैसे निपट सकता हूं?
public class TestServlet extends HttpServlet implements Servlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/plain");
Writer output = response.getWriter();
output.write("öäüÖÄÜß");
output.flush();
output.close();
}
}
अगर मैं घाट के तहत इस तैनाती और इसे करने के लिए ब्राउज़र को निर्देशित, यह उम्मीद परिणाम देता है। डेटा ISO-8859-1 के रूप में दिया जाता है और अगर मैं हेडर में एक बार देख ले, तो जेट्टी रिटर्न:
Content-Type: text/plain; charset=iso-8859-1
ब्राउज़र इस हैडर से एन्कोडिंग का पता लगाता है। यदि मैं टोमकैट में एक ही सर्वलेट को तैनात करता हूं, तो ब्राउज़र अजीब पात्र दिखाता है। लेकिन टोमकैट आईएसओ -885 9 -1 के रूप में डेटा भी लौटाता है, अंतर यह है कि कोई हेडर इसके बारे में नहीं बताता है। तो ब्राउज़र को एन्कोडिंग का अनुमान लगाना है, और यह गलत हो जाता है।
मेरा सवाल है, क्या यह टोमकैट सही या बग का व्यवहार है? और यदि यह सही है, तो मैं इस समस्या से कैसे बच सकता हूं? निश्चित रूप से, मैं हमेशा सर्वलेट में response.setCharacterEncoding("UTF-8");
जोड़ सकता हूं, लेकिन इसका मतलब है कि मैंने एक निश्चित एन्कोडिंग सेट की है, जिसे ब्राउजर समझ सकता है या नहीं। समस्या अधिक प्रासंगिक है, यदि कोई ब्राउज़र नहीं है लेकिन दूसरी सेवा सर्वलेट तक पहुंचती है। तो मुझे सबसे लचीली तरीके से समस्या से कैसे निपटना चाहिए?
Btw: 'लागू करता Servlet' ज़रूरत से ज़्यादा' HttpServlet' पहले से ही करता है के रूप में है। – BalusC