Feedback Form

JspWriter: Buffered Output with autoFlush and page buffering

JspWriter: Buffered Output with autoFlush and Page Buffering

JspWriter क्या है?

JSP (Java Server Pages) में जब भी हम dynamic content generate करते हैं, तो उसे client browser तक भेजने के लिए output stream की जरूरत होती है। इसी काम को करने के लिए JSP में JspWriter class का use किया जाता है। यह output stream को represent करती है जो HTML, text या dynamic data को browser तक पहुंचाती है।

JspWriter class, javax.servlet.jsp package में होती है और यह java.io.Writer class को extend करती है। इसका मुख्य काम है JSP page से data को buffer में store करना और फिर उसे client तक भेजना।

JspWriter कैसे काम करता है?

जब भी कोई JSP page execute होता है, तो server उसके लिए एक JspWriter object बनाता है जिसे हम out object के नाम से जानते हैं। यह object HTML या dynamic content को temporarily buffer में store करता है।

इस buffer में data तब तक store रहता है जब तक कि buffer भर नहीं जाता या page पूरी तरह execute नहीं हो जाता। उसके बाद यह data automatically browser को भेज दिया जाता है।

Example:

<%
out.println("Hello Students!");
out.println("Welcome to JSP Buffered Output Example.");
%>

ऊपर दिए गए example में out एक JspWriter object है जो output को buffer में store करता है और बाद में client browser तक भेजता है।

Buffered Output क्या होता है?

Buffered Output का मतलब है कि data सीधे browser तक नहीं भेजा जाता, बल्कि पहले एक temporary memory area जिसे buffer कहा जाता है, उसमें store किया जाता है। इससे performance बेहतर होती है और server को बार-बार output भेजने की जरूरत नहीं पड़ती।

Buffered Output के फायदे:

  • Server की performance बेहतर होती है।
  • Output को modify या cancel करना आसान होता है।
  • Client तक एक साथ पूरा response भेजा जा सकता है।
  • Data transmission के दौरान control बना रहता है।

Buffer Size सेट करना:

हम buffer size को JSP page directive में set कर सकते हैं।

<%@ page buffer="8kb" %>

Default buffer size 8KB होती है। लेकिन आप चाहें तो इसे "none" भी कर सकते हैं ताकि data तुरंत client को भेजा जाए।

<%@ page buffer="none" %>

autoFlush क्या होता है?

जब buffer भर जाता है, तो server को decide करना होता है कि data को automatically flush किया जाए या नहीं। यही काम autoFlush attribute करता है।

autoFlush attribute के values:

  • true → जब buffer भर जाता है, तो content automatically browser तक भेज दिया जाता है।
  • false → अगर buffer भर गया और autoFlush false है, तो JSP exception throw करेगा।

Example:

<%@ page buffer="8kb" autoFlush="true" %>

इस example में जब भी buffer भर जाएगा, data अपने आप client तक पहुंच जाएगा।

Page Buffering क्या है?

Page Buffering का मतलब है कि पूरा JSP page execute होने तक output को buffer में store किया जाता है। इसका फायदा यह है कि आप response को modify या redirect कर सकते हैं जब तक कि output client को भेजा न गया हो।

अगर buffering disable कर दी जाती है (यानी buffer="none"), तो output तुरंत client तक जाता है, और response को बाद में modify नहीं किया जा सकता।

Table: Buffer और autoFlush का Comparison

Property Description Default Value
buffer Data को temporarily store करने की memory size 8kb
autoFlush Buffer भरने पर data को automatically flush करता है या नहीं true

JspWriter के Important Methods

JspWriter class कई useful methods provide करती है जिनसे हम buffer और output को control कर सकते हैं।

Method Description
void clear() Buffer को clear करता है लेकिन अगर data पहले से flush हो चुका है, तो exception देता है।
void clearBuffer() Buffer को बिना exception दिए empty करता है।
void flush() Buffer का content client को भेजता है।
int getBufferSize() Buffer का size बताता है।
int getRemaining() Buffer में कितना space बचा है, बताता है।
boolean isAutoFlush() AutoFlush true है या नहीं, ये बताता है।

Example: Methods का Use

<%
out.println("Buffer Size: " + out.getBufferSize());
out.println("Remaining: " + out.getRemaining());
out.flush();
%>

यह example buffer की details बताता है और manually output को flush करता है।

JspWriter Internally कैसे काम करता है?

जब JSP page compile होता है, तो उसका code servlet में बदल जाता है। इस servlet के अंदर _jspService() method में JspWriter out object create होता है।

यह out object internally response.getWriter() के similar काम करता है लेकिन यह buffered होता है और JSP के लिए additional features provide करता है।

Buffer और Error Handling

अगर किसी JSP page में buffer enable है और exception occur होता है, तो JSP engine पहले buffer को clear करता है ताकि incomplete response client को न मिले। इसके बाद error page को execute करता है।

अगर buffer disable है (buffer="none"), तो partial data पहले ही browser तक पहुंच जाता है, इसलिए error page effective नहीं होता।

Practical Example of Buffered Output and autoFlush

<%@ page buffer="4kb" autoFlush="true" %>

<%
for(int i=1; i<=1000; i++) {
out.println("Number: " + i + "<br>");
}
%>

इस example में जब buffer 4KB से भर जाएगा, तो autoFlush="true" होने के कारण data अपने आप browser तक पहुंच जाएगा।

Best Practices for Buffered Output

  • Default buffer size (8KB) को तभी बदलें जब जरूरी हो।
  • अगर page बहुत बड़ा है तो autoFlush को true ही रखें।
  • Buffer clear करने से पहले ensure करें कि data अभी तक flush नहीं हुआ।
  • Buffer का use performance बढ़ाने के लिए करें, लेकिन उसे manage करना न भूलें।
  • Error pages में buffering को enable रखना बेहतर रहता है।

Exam Point of View Notes

  • JspWriter class JSP में output को manage करती है।
  • यह output को पहले buffer में store करती है फिर client तक भेजती है।
  • autoFlush true होने पर buffer भरने पर data अपने आप भेजा जाता है।
  • page buffer="none" करने पर buffering disable हो जाती है।
  • Buffering performance improve करती है और response को control करने देती है।
  • Methods जैसे flush(), clear(), getBufferSize() exam में अक्सर पूछे जाते हैं।
  • Error handling के लिए buffering enable रहना चाहिए।
  • Default buffer size = 8KB और default autoFlush = true होता है।