2012-11-02 18 views
14

आप सभी "डुप्लिकेट" कट्टरपंथियों के लिए, एसओ दाएं here पर एक समान प्रश्न है। अंतर यह है कि मैं एक ज्वलंत उदाहरण पेंट करता हूं कि मैं आउटपुट को समझ नहीं पा रहा हूं।जावा ईई में जेएसपीवाइटर और प्रिंटवाइटर के बीच अंतर?

JspWriter और PrintWriter के लिए दस्तावेज़ का कहना है कि दो अंतर हैं: 1. JspWriter अपवाद फेंक कर सकते हैं, PrintWriter ऐसा नहीं करना चाहिए। 2. जेएसपीवाइटर दृश्य के पीछे एक प्रिंटवाइटर का उपयोग करता है, लेकिन चूंकि डिफ़ॉल्ट रूप से जेएसपी पेज buffered हैं, तो प्रिंटवाइटर the buffer is flushed तक नहीं बनाया जाएगा - जो भी जेएसपी पृष्ठ के संदर्भ में है। मुझे यकीन नहीं है कि मैं इस आखिरी हिस्से को समझ गया हूं। इस JSP पेज पर विचार करें:

<%@page import="java.io.PrintWriter"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JspWriter versus PrintWriter</title> 
    </head> 
    <body> 
     <p>I should be row one.</p> 
     <% 
      out.println("<p>JspWriter said: I should be the second row.</p>"); 

      PrintWriter pw = response.getWriter(); 
      pw.println("<p>PrintWriter said: I should be the third row.</p>"); 
     %> 
     <p>I should be the fourth row.</p> 
    </body> 
</html> 

यह निम्न उत्पादन का उत्पादन:

PrintWriter said: I should be the third row. 
I should be row one. 
JspWriter said: I should be the second row. 
I should be the fourth row. 

आप देख सकते हैं, JspWriter ब्राउज़र मैं इसे करने के लिए उम्मीद की गई थी करने के लिए अपने स्ट्रिंग आउटपुट। लेकिन ब्राउज़र पर अन्य सभी को भेजे जाने से पहले प्रिंटवाइटर अपनी स्ट्रिंग आउटपुट करता है। यदि हम ब्राउज़र पर भेजे गए स्रोत कोड की जांच करते हैं, तो DOCTYPE घोषणा से पहले, प्रिंटवाइटर की स्ट्रिंग को पहली पंक्ति के रूप में भेजा जाता है। तो उपर्युक्त उदाहरण में, वास्तव में क्या होता है?

उत्तर

13

विवरण अपने खुद के सवाल में है:

JspWriter दृश्य के पीछे एक PrintWriter का उपयोग करता है, लेकिन जब से डिफ़ॉल्ट रूप से JSP पृष्ठों बफ़र कर रहे हैं, जब तक PrintWriter बफर

प्लावित है नहीं बनाया जाएगा

इसका मतलब है कि जेएसपीवाइटर को जो लिखा गया है वह बफर किया गया है, और एक बार यह बफर फ़्लश हो गया है (या तो क्योंकि बफर भरा हुआ है, या क्योंकि जेएसपी इसके निष्पादन के अंत तक पहुंच गया है), सामग्री को लिखा गया है प्रतिक्रिया का प्रिंटवाइटर।

तो अपने उदाहरण के प्रवाह को निम्नलिखित में से एक है:

  • स्क्रिप्टलेट तक स्थिर HTML कोड: इन-स्मृति बफर के लिए लिखा
  • out.println (...): के लिए लिखा में-स्मृति बफर
  • pw.println (...): में स्मृति बफर के लिए लिखा में स्मृति बफर के
  • फ्लश: प्रतिक्रिया JSP के अंत तक
  • स्थिर HTML कोड को पत्र लिखा : इसमें शामिल सभी को राहत के लिए लिखा गया है ऑन
+0

उहम वहां आप जाते हैं! Thanx साथी, बहुत सराहना की। –

1

जेएसपी को क्लाइंट को आउटपुट भेजने के लिए "आउट" निहित ऑब्जेक्ट द्वारा निर्दिष्ट जेएसपीवाइटर का उपयोग करना चाहिए। एक JspWriter प्रिंटवाइटर का एक बफर संस्करण है। विवरण के लिए जेएसपीवाइटर एपीआई देखें। JspWriter भी java.io.IOException फेंककर प्रिंटवाइटर से अलग है, जो एक प्रिंटवाइटर नहीं करता है।

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