Writing HTML via PrintWriter: Structure, Tags
HttpServletResponse — Exam Friendly Guide
HttpServletResponse
HttpServletResponse एक interface है जो HTTP specific response भेजने के लिए servlet को मदद करता है। यह servlet container द्वारा बनाया जाता है और servlet के doGet, doPost इत्यादि method में argument के रूप में मिलता है। :contentReference[oaicite:0]{index=0}
What is HttpServletResponse?
सरल भाषा में, HttpServletResponse वही object है जो browser या client को server से लौटने वाला पूरा HTTP response carry करता है। इसमें status code, headers, cookies और body सभी शामिल होते हैं। :contentReference[oaicite:1]{index=1}
Servlet जब response तैयार करता है तो ये object इस्तेमाल करता है: headers set करना, content type बताना, cookies जोड़ना, और actual content लिखना। यह HTTP protocol के नियमों के अनुसार response तैयार होने में मदद करता है। :contentReference[oaicite:2]{index=2}
Why is HttpServletResponse important for exams?
Exam के सवाल अक्सर methods, behaviour और common mistakes पर आते हैं — जैसे getWriter vs getOutputStream, sendRedirect vs forward, और response committed/ buffer handling। इन topics को ठीक से समझना जरूरी है।
आम practical questions में छोटे code snippets दिए जाते हैं और पूछा जाता है कि client को क्या मिलेगा — यह सब HttpServletResponse के सही use पर निर्भर करता है।
Key responsibilities (short list)
- Set status code (200, 404, 500)
- Set response headers (Content-Type, Cache-Control)
- Send redirect to another URL
- Send error with message
- Write response body using
PrintWriterयाServletOutputStream - Manage cookies and character encoding
Common Methods and short explanation
नीचे जो methods हैं वे servlet exams में अक्सर पूछे जाते हैं — छोटा-छोटा description और usage दिया गया है।
| Method | Purpose | Notes |
|---|---|---|
setStatus(int sc) |
HTTP status code set करने के लिए | 200, 404, 500 आदि। |
sendError(int sc) |
Server-generated error response भेजता है | Buffer clear होता है और container default error page भेज सकता है। :contentReference[oaicite:3]{index=3} |
sendRedirect(String location) |
Client को नए location पर redirect करता है (HTTP 302) | Client side redirect — URL browser में बदलता है। |
setContentType(String type) |
Response का MIME type set करता है | उदाहरण: text/html; charset=UTF-8 |
getWriter() |
Character text लिखने के लिए PrintWriter देता है |
Binary output के साथ mix नहीं करना चाहिए। :contentReference[oaicite:4]{index=4} |
getOutputStream() |
Binary data लिखने के लिए ServletOutputStream |
एक request में getWriter और getOutputStream दोनों नहीं use करें। :contentReference[oaicite:5]{index=5} |
setHeader(String name, String value) |
Custom header add/replace करने के लिए | Cache control, CORS headers इत्यादि के लिए उपयोगी। |
addCookie(Cookie cookie) |
Response में cookie जोड़ता है | Set-Cookie header के रूप में client को भेजा जाता है। |
Important behavioral points (exam tips)
Committed response: response committed होने के बाद headers बदलना संभव नहीं होता। जब buffer flush होता है या output लिख कर container ने response भेज दिया तो response committed हो जाता है।
इसलिए large output लिखने से पहले headers, content type और encoding set कर लो; नहीं तो set करने पर IllegalStateException नहीं मिलेगा पर header changes reflect नहीं होंगे।
getWriter() vs getOutputStream()
getWriter() text data (character) के लिए है और getOutputStream() binary data के लिए। दोनों को एक साथ use करने से IllegalState हो सकता है। exams में यह classic question आता है — always choose one। :contentReference[oaicite:6]{index=6}
Character encoding भी set करना जरूरी है, जैसे response.setContentType("text/html; charset=UTF-8") और फिर PrintWriter लें। इस order से content सही रूप से भेजा जाता है।
sendRedirect vs forward
sendRedirect client-side redirect है; browser को नई URL पर भेजता है (HTTP 302)। यही कारण है कि URL browser में change होता है।
forward (RequestDispatcher) server-side internal forward है; browser को कुछ पता नहीं चलता और URL same रहता है — यह दोनों behavior exam में compare करने के लिए पूछे जाते हैं।
sendError behaviour (short note)
sendError(int) call करने पर container buffer को clear कर सकता है और default error page generate कर सकता है। इसलिए अगर custom error page भेजना है तो पहले buffer reset करना या custom error handling करना चाहिए। :contentReference[oaicite:7]{index=7}
Exam में पूछ सकते हैं कि sendError के बाद response committed हुआ या नहीं — implementation पर निर्भर करता है पर आमतौर पर buffer cleared और container error page send कर देता है।
Character encoding and content type
Response की encoding set करने का सही तरीका यह है: सबसे पहले response.setContentType("text/html; charset=UTF-8") और फिर PrintWriter out = response.getWriter() लेना। यह सुनिश्चित करता है कि characters सही रूप से encode हों।
अगर पहले getWriter() ले लिया और बाद में setContentType करोगे तो encoding काम नहीं कर सकती — इसलिए order का ध्यान रखो।
Example: Basic doGet using HttpServletResponse
नीचे एक छोटा सा code exam-style snippet है जो common methods दिखाता है — इसे याद रखो और समझो।
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
out.println("<html><body>");
out.println("<h2>Hello from Servlet</h2>");
out.println("<p>Status: " + response.getStatus() + "</p>");
out.println("</body></html>");
}
इस example में response का content type set किया गया, header जोड़ा गया, और body लिखा गया — exam में इसी तरह छोटे code reading questions होते हैं।
Practical pitfalls (common mistakes)
1) getWriter() और getOutputStream() दोनों का mixed use करना। यह IllegalState या undefined behavior दे सकता है। :contentReference[oaicite:8]{index=8}
2) Response committed होने के बाद headers change करने की कोशिश करना — काम नहीं करेगा। इसलिए headers पहले set करें।
3) sendRedirect से पहले response में output लिख देना — redirect तब काम नहीं कर सकता अगर response committed हो गया।
Buffering methods (quick)
setBufferSize(int) से आप buffer size control कर सकते हैं और flushBuffer() से buffer flush कर सकते हैं। buffer के कारण आप response भेजने से पहले कुछ data accumulate कर सकते हो।
reset() और resetBuffer() का difference याद रखें — reset() headers भी clear कर देता है जबकि resetBuffer() सिर्फ buffer खाली करता है।
Headers, Cache and Security tips
Exam में कभी-कभी security related header या cache header पूछे जाते हैं — जैसे Cache-Control, Pragma, और X-Frame-Options। इन्हें response.setHeader() से set करें।
साधारण security practice: sensitive pages पर cache off रखें और appropriate headers भेजें ताकि browser cache में private data न रहे।
Cookies and sessions (short)
Cookies add करने के लिए Cookie c = new Cookie("name","value"); response.addCookie(c); use करें। Cookie attributes जैसे maxAge, secure, httpOnly set करें।
Session management के लिए cookies (जैसे JSESSIONID) common होते हैं — response के माध्यम से cookie headers भेजे जाते हैं।
Response Wrappers and Filters (exam angle)
Filters या custom wrappers लिखकर आप response को modify कर सकते हो — उदाहरण: response body को capture करने के लिए HttpServletResponseWrapper extend करके buffering wrapper बनाते हैं। यह technique auditing या compression के लिए use होती है। :contentReference[oaicite:9]{index=9}
Exam में अक्सर पूछते हैं कि wrapper क्यों चाहिए — answer: content को inspect/modify/ log करने के लिए या response को buffer करने के लिए।
Small checklist for practical viva / coding exam
- Set content type and charset before getting writer.
- Use either getWriter or getOutputStream — not both.
- Decide between sendRedirect (client) और forward (server) और उनकी implications समझो.
- Headers और cookies set करने से पहले response committed न हो।
- Errors के लिए sendError और custom error pages का behaviour समझो। :contentReference[oaicite:10]{index=10}
Short Q&A (one-line exam style answers)
Q: sendRedirect() क्या करता है?
A: Client को HTTP redirect (302) भेजता है, browser नई URL पर request करेगा।
Q: sendError(404) और setStatus(404) में फर्क?
A: sendError container default error handling trigger कर सकता है और buffer clear कर सकता है; setStatus सिर्फ code set करता है। :contentReference[oaicite:11]{index=11}
Small table: When to use which
| Situation | Use | Why |
|---|---|---|
| Send user to login page | sendRedirect("/login") |
Client must get new URL; bookmarkable |
| Internal JSP render | RequestDispatcher.forward() |
Server side forward; URL unchanged |
| Return JSON API | response.setContentType("application/json; charset=UTF-8") |
Proper MIME and encoding |
References and official docs (useful for answer justification)
HttpServletResponse के official API और javadocs servlet specifications में दिए हुए हैं — Oracle / Jakarta और Tomcat documentation reference के रूप में use करें। यह authoritative source है जो examiners भी expect कर सकते हैं। :contentReference[oaicite:12]{index=12}
StackOverflow और practical tutorials (GeeksforGeeks, university notes) पर भी behavior examples मिलते हैं — पर exam answers में official spec का reference बेहतर माना जाता है। :contentReference[oaicite:13]{index=13}
Quick revision notes (bullet points — memorize these)
- HttpServletResponse = response holder (status, headers, body)
- Set content type and charset before writer
- Use one of getWriter/getOutputStream only
- sendRedirect = client-side; forward = server-side
- sendError may clear buffer and let container render error page
- Headers cannot be changed after response committed
- Use response wrappers for capture/modify of body
Exam-style mini practice questions (try to answer)
1) A servlet calls response.getWriter(), writes some HTML, then calls sendRedirect("/home"). What happens? Explain briefly.
2) What is output if servlet sets response.setStatus(404) and writes a body with a custom message? Does container show default error page?
3) When would you use setContentLengthLong() vs setContentType()?
Model answers (short) — check after attempting
1) If response not yet committed, sendRedirect will set redirect headers and client will navigate; पर अगर buffer flush हो चुका है तो redirect fail हो सकता है।
2) setStatus(404) सिर्फ status set करता है; container तब default error page तभी नहीं भेजेगा जब तक आप explicitly sendError न करो।
3) setContentLengthLong() body का byte-length set करने के लिए; setContentType() MIME type और charset define करता है — दोनों अलग काम करते हैं।
Quick memory cheats (one-liners to remember)
setContentType()→ MIME & charsetgetWriter()→ charactersgetOutputStream()→ bytessendRedirect()→ client-sideforward()→ server-side- Headers set before commit
Final exam prep tip (how to practice)
1) छोटे servlets लिख कर container (Tomcat) पर run करो और console/browser output observe करो। यह behavior सबसे जल्दी याद रहता है।
2) Edge cases शेयर करो — जैसे large response, buffer flush, error send करने के बाद response change attempts — इन्हें practical करके समझो।
Useful keywords to remember for answers
HttpServletResponse, HttpServletRequest, setContentType, sendRedirect, forward, sendError, getWriter, getOutputStream, setStatus, headers, cookies, buffer, committed, content-length, charset, MIME type.