2010-05-24 16 views
6

में शीर्षलेख टाइप करें जब होता है तब होता है जब एक .jsp में हेडर दोहराए जाते हैं तो आप किसी अन्य .jsp में शामिल होते हैं?जावा (जेएसपी): सामग्री दोहराएं "उप-जेएसपी"

उदाहरण के लिए यदि इस के साथ example.jsp शुरू होता है:

<?xml version="1.0" encoding="UTF-8"?> 
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"> 
<jsp:directive.page contentType="text/html; charset=UTF-8" /> 

<div class="content"> 

<jsp:include page="support.jsp"/> 
... 

(यह भी शामिल है support.jsp)

और फिर support.jsp शुरू होता है इस के साथ भी:

<?xml version="1.0" encoding="UTF-8"?> 
<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"> 
<jsp:directive.page contentType="text/html; charset=UTF-8" /> 
... 

क्या यह एक समस्या है? क्या यह बुरा अभ्यास है?

कंक्रीटली क्या होता है जब आप कई बार एक शीर्षलेख दोहराते हैं जो परिणामस्वरूप .html पृष्ठ में केवल एक शीर्षलेख से मेल खाता है?

उत्तर

5

JSP Specification से:

JSP.5.4 <jsp:>

...

शामिल एक शामिल पेज प्रतिसाद स्थिति कोड या सेट हेडर बदल नहीं सकते। यह setCookie जैसे invoking विधियों को रोकता है। इन विधियों को आमंत्रित करने के प्रयासों को अनदेखा कर दिया जाएगा। बाधा के बराबर है RequestDispatcher क्लास की विधि शामिल है।

यही है, सामग्री प्रकार सेट करने का प्रयास अनदेखा कर दिया जाएगा।

0

यह बिल्कुल सामान्य अभ्यास है।

जिसे आप 'हेडर' कहते हैं, वह jsp-compiler के लिए निर्देश हैं।

+0

+1 लेकिन जिसे मैं "हेडर" कहता हूं उसे आधिकारिक जेएसपी विनिर्देश में "हेडर" भी कहा जाता है;) – SyntaxT3rr0r

2

निर्देश ServletResponse.setContentType कॉल करने के लिए सीधे अनुवाद किया है

इस विधि के लिए दस्तावेजों का कहना है:

सेट प्रतिक्रिया की सामग्री प्रकार ग्राहक के लिए भेजा जा रहा है, अगर प्रतिक्रिया नहीं किया गया है अभी तक प्रतिबद्ध दिए गए सामग्री प्रकार में वर्ण एन्कोडिंग विनिर्देशन शामिल हो सकता है, उदाहरण के लिए, पाठ/html; charset = UTF-8। प्रतिक्रिया का वर्ण एन्कोडिंग केवल दिए गए सामग्री प्रकार से सेट है यदि इस विधि को getWriter कहा जाता है।

सामग्री विधि और चरित्र एन्कोडिंग बदलने के लिए इस विधि को बार-बार कहा जा सकता है। प्रतिक्रिया के बाद प्रतिबद्ध होने पर इस विधि का कोई प्रभाव नहीं पड़ता है।यह प्रतिक्रिया के वर्ण एन्कोडिंग को सेट नहीं करता है यदि यह है जिसे getWriter कहा जाता है या प्रतिक्रिया के बाद प्रतिबद्ध किया गया है।

कंटेनरों सामग्री प्रकार और वर्ण एन्कोडिंग ग्राहक के लिए सर्वलेट प्रतिक्रिया के लेखक के लिए इस्तेमाल संवाद अगर प्रोटोकॉल ऐसा करने के लिए एक तरीका प्रदान करता चाहिए। HTTP के मामले में, सामग्री-प्रकार शीर्षलेख का उपयोग किया जाता है।

ऐसा लगता है कि शीर्ष-स्तर के जेएसपी पृष्ठ में केवल एक बार इस निर्देश का उपयोग करना बेहतर है, यहां तक ​​कि नियंत्रक सर्वलेट में भी, लेकिन निश्चित रूप से शामिल पृष्ठों में नहीं।

JSPX में नहीं लिखा पृष्ठों के लिए

, एक निर्देश है कि उपयोगी है और सभी JSPs गैर- ASCII वर्ण है <%@ page pageEncoding="XXXX" %> है में स्थापित किया जाना चाहिए। यदि आप अपने सभी पृष्ठों पर \ uXXXX कोड प्रिंट करना पसंद नहीं करते हैं तो मैं अत्यधिक अनुशंसा करता हूं।

+0

हालांकि, ओपी जेएसपीएक्स (जेएसपी एक्सएमएल, एक्सएमएल सिंटैक्स में जेएसपी, "जेएसपी दस्तावेज़")। एक्सएमएल घोषणा में पहले से ही पेज एन्कोडिंग शामिल है। – BalusC

+0

@ बालससी: इसे इंगित करने के लिए धन्यवाद। अंतिम अनुच्छेद की अद्यतन भाषा। मुझे लगता है कि 'कंटेंट टाइप' निर्देश का मूल भ्रम और प्रसार यह समझने से उपजी है कि ये 2 पूरी तरह अलग निर्देश कैसे काम करते हैं। असल में यदि आपके जेएसपी पृष्ठ में गैर-ASCII है, तो उसे 'पेज एन्कोडिंग' सेट करना आवश्यक है, लेकिन आपको श्रृंखला में किसी के लिए 'ContentType' छोड़ना चाहिए। कम से कम यह मेरा भ्रम था। –

+0

मैंने आपको +1 दिया लेकिन ... आपने वास्तव में उस प्रश्न का समाधान नहीं किया जो मुझे लगता है: जेएलएस जो एक्स्टाव उद्धृत विशेष रूप से बताता है कि * "एक शामिल पृष्ठ प्रतिक्रिया स्थिति कोड या हेडर सेट नहीं कर सकता है। इन तरीकों का आह्वान करने का प्रयास होगा अवहेलना करना"*। तो AFAICT मैं एक शामिल कर रहा हूं और इसलिए बाद के कॉलों को अनदेखा किया जा रहा है। यह आपके द्वारा उद्धृत किए गए जैसा नहीं है, जो विशेष रूप से * setContentType * विधि के साथ सौदा करता है (स्पष्ट रूप से जब * * शामिल नहीं है ".jsp के अंदर से बुलाया जाता है)। – SyntaxT3rr0r

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