2010-09-17 6 views
12

मेरा सर्वलेट सिर्फ जेएसओएन प्रतिक्रियाओं के लिए यूटीएफ -8 का उपयोग नहीं करेगा।मेरा सर्वलेट यूटीएफ -8 में जेएसओएन अनुरोधों का जवाब क्यों नहीं देगा?

MyServlet.java:

public class MyServlet extends HttpServlet { 

    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws Exception { 

    PrintWriter writer = res.getWriter(); 

    res.setCharacterEncoding("UTF-8"); 
    res.setContentType("application/json; charset=UTF-8"); 

    writer.print(getSomeJson()); 
    } 
} 

लेकिन विशेष वर्ण दिखाई नहीं दे रहे, और जब मैं हेडर कि मैं Firebug में वापस हो रही है जांच, मैं Content-Type: application/json;charset=ISO-8859-1 देखते हैं।

मैंने अपनी सर्वलेट निर्देशिका में grep -ri iso . किया था, और कुछ भी नहीं आया, इसलिए कहीं भी मैं आईएसओ -885 9 -1 को स्पष्ट रूप से सेट नहीं कर रहा हूं।

मुझे यह भी निर्दिष्ट करना चाहिए कि मैं इसे एक्लेप्से में टॉमकैट 7 पर एक विकास वातावरण के रूप में एक जे 2 ईई लक्ष्य के साथ चला रहा हूं, सोलारिस 10 के साथ और जो कुछ भी वे अपने वेब सर्वर पर्यावरण (किसी और को यह कहते हैं) उत्पादन वातावरण के रूप में कहते हैं, और व्यवहार वही है।

मैंने यह भी पुष्टि की है कि सबमिट किया गया अनुरोध यूटीएफ -8 है, और केवल प्रतिक्रिया आईएसओ -885 9 -1 है।

अद्यतन

मैं प्रतिबिंबित करने के लिए है कि मैं PrintWriter बोल रहा हूँ इससे पहले कि मैं वर्ण एन्कोडिंग सेट कोड में संशोधन किया है। मैंने इसे अपने मूल उदाहरण से छोड़ा, और अब मुझे एहसास हुआ कि यह मेरी समस्या का स्रोत था। मैंने here पढ़ा है कि आपको HttpServletResponse.getWriter() पर कॉल करने से पहले वर्ण एन्कोडिंग सेट करना होगा, या getWriter इसे आपके लिए आईएसओ -8859-1 पर सेट करेगा।

यह मेरी समस्या थी। तो उपर्युक्त उदाहरण

public class MyServlet extends HttpServlet { 

    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws Exception { 

    res.setCharacterEncoding("UTF-8"); 
    res.setContentType("application/json"); 

    PrintWriter writer = res.getWriter(); 
    writer.print(getSomeJson()); 
    } 
} 
+1

आपके "अपडेट" के लिए धन्यवाद, यह वही है जो मैं ढूंढ रहा हूं: पहला सेट कैरेक्टर एन्कोडिंग, दूसरा लेखक प्राप्त करें। –

उत्तर

4

एक बार एन्कोडिंग प्रतिक्रिया के लिए सेट हो जाने पर, इसे बदला नहीं जा सकता है।

यूटीएफ -8 को मजबूर करने का सबसे आसान तरीका है अपना खुद का फ़िल्टर बनाना जो प्रतिक्रिया में सबसे पहले और एन्कोडिंग सेट करना है।

how Spring 3.0 does this पर एक नज़र डालें। यहां तक ​​कि यदि आप अपनी परियोजना में वसंत का उपयोग नहीं कर सकते हैं, तो शायद आप कुछ प्रेरणा प्राप्त कर सकते हैं (सुनिश्चित करें कि आपकी कंपनी नीति आपको ओपन सोर्स लाइसेंस से प्रेरणा प्राप्त करने की अनुमति देती है)।

+0

आप एन्कोडिंग को बदलने में सक्षम नहीं होने के बारे में सही हैं। मैं इसे दो बार स्थापित कर रहा था, लेकिन स्पष्ट रूप से नहीं। मैं getWriter के साथ यह पूरी तरह से कर रहा था। मेरा अद्यतन प्रश्न देखें। आपके एवर के लिए धन्यवाद, और +1। –

1

कोड को ठीक दिखाना चाहिए। या तो आप उस कोड को नहीं चला रहे हैं जो आपको लगता है कि आप चल रहे हैं, या कुछ Filter या अनुरोध-प्रतिक्रिया श्रृंखला में प्रॉक्सी कहीं भी है जो सामग्री प्रकार को संशोधित करता है।

+0

मुझे नहीं पता कि यह कहां हो सकता है जब तक कि यह मेरे पर्यावरण का डिफ़ॉल्ट व्यवहार न हो। एक स्रोत फ़ाइल है और मैंने इसे स्क्रैच से लिखा है। लेकिन यह मेरा पहला सर्वलेट भी है, इसलिए मुझे नहीं पता कि 'फ़िल्टर' क्या है। –

+0

वेबपैप के '/ WEB-INF/web.xml' में कुछ और नहीं? वास्तव में टोमकैट संस्करण क्या है? क्या आपने इसे डाउनलोड/इंस्टॉल करने के बाद अपनी '/ conf/web.xml' फ़ाइल में कुछ भी संशोधित किया था? – BalusC

+0

और कुछ भी नहीं। मेरा अद्यतन प्रश्न देखें। –

0

विशिष्ट समस्या के अलावा, आपको वास्तव में यूटीएफ -8 एन्कोडेड JSON के रूप में सामग्री लिखने के लिए JSON लाइब्रेरी का उपयोग करके आउटपुट स्ट्रीम प्राप्त करने पर विचार करना चाहिए; लेखकों का उपयोग करने का कोई फायदा नहीं है। कुछ JSON संकुल केवल तारों के साथ काम करते हैं, जो दुर्भाग्यपूर्ण है, लेकिन अधिकांश अधिक कुशल धाराओं का उपयोग करने की अनुमति देते हैं (सुरक्षित और अधिक कुशल पार्सर/जनरेटर एक साथ भागने और एन्कोडिंग पहलुओं को संभाल सकता है)।

+0

आपके सुझाव के लिए धन्यवाद। मैं इसमें देख लूंगा। यह मेरा पहला सर्वलेट है, इसलिए मैं उपलब्ध पुस्तकालयों से बहुत परिचित नहीं हूं। मैं जो भी हमारे डिफ़ॉल्ट सोलारिस 10 पर्यावरण पर उपलब्ध है, उसका उपयोग करने के लिए बाध्य हूं। –

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