3.1 HttpServletResponse klassi
Servletingni service() usulini chaqirgandan so'ng, web-konteyner HttpServletResponse obyektiga asoslanib mijozga javobni shakllantiradi. Shunday ekan, agar javobga qandaydir ta'sir o'tkazmoqchi bo'lsang, ushbu obyektni o'zgartirishingiz kerak.
Server javobi uch qismdan iborat:
- Status qatori (masalan: 200 OK)
- Headers (zagolovkalar)
- Javobning tanasi (response body)
Va HttpServletResponse klassining usullari ham 3 guruhga bo'linadimi? Hamma ham o'ylagandek emas:
| Usullar | Tavsif | |
|---|---|---|
| 1 | void setStatus(int sc) |
Javobning status kodini o'rnatadi. |
| 2 | void sendError(int sc) |
Mijozga ko'rsatilgan kod bilan xato yuboradi. |
| 3 | void sendError(int sc, String msg) |
Mijozga ko'rsatilgan kod va xabar bilan xato yuboradi. |
| 4 | void addHeader(String name, String value) |
Javobdagi zagolovkalar ro'yxatiga yangi zagolovka qo'shadi. |
| 5 | void setHeader(String name, String value) |
Javobdagi zagolovkalar ro'yxatidagi zagolovkani o'zgartiradi. |
| 6 | boolean containsHeader(String name) |
Bu zagolovka mavjudligini tekshiradi. |
| 7 | void addCookie(Cookie cookie) |
Javobga Cookie qo'shadi. |
| 8 | void sendRedirect(String location) |
Mijozni boshqa URL-ga yo'naltiradi. |
| 9 | String encodeRedirectURL(String url) |
sendRedirect usulida foydalanish uchun URL-ni kodlaydi. |
| 10 | String encodeURL(String url) |
Sessiya identifikatori bilan URL-ni kodlaydi. |
| 11 | void setContentType(String type) |
Natijaning MimeType ni o'rnatadi. |
| 12 | void setContentLength(int len) |
Javob tanasining uzunligini o'rnatadi. |
| 13 | void setCharacterEncoding(String charset) |
Javobning kodlash to'plamini o'rnatadi. |
| 14 | void setBufferSize(int size) |
Javob tanasi uchun bufferni hajmini o'rnatadi. |
| 15 | boolean isCommitted() |
Buffer javobga yozilganini tekshiradi. |
| 16 | void flushBuffer() |
Bufferdagi ma'lumotlarni javobga yozadi. |
| 17 | void reset() |
Buffer, zagolovkalar va javob kodlarini qayta o'rnatadi. |
| 18 | void resetBuffer() |
Javob bufferini tozalaydi. |
Usullar juda oson. Lekin ba'zi narsalarni tushuntirib beraman.
Buffer. Servlet javobi bufferga yoziladi va bu foydalanuvchiga to'g'ridan-to'g'ri yuborilmaydi. Shunday ekan, biror sabab bilan (masalan, xato bo'lsa), bufferda yozilgan hamma narsani bekor qilishingiz mumkin. Hattoki reset() usulini chaqirib, buffer tarkibini va javob kodlarini ham o'chirishingiz mumkin.
3.2 redirect()
Ikkinchi muhim jihat — bu redirect. Agar servletingiz mijozni boshqa URL'ga yo'naltirishga qaror qilsa, qandaydir tarzda URL'ni mijozga yuborishingiz kerak bo'ladi. Buni sendRedirect usuli yordamida amalga oshirishingiz mumkin.
Lekin muhim bir jihat bor. URI response body'da ruxsat berilganidan ko'ra ko'proq belgilarni o'z ichiga olishi mumkin. Shuning uchun URL'ni sendRedirect() usulini chaqirishdan oldin ruxsat etilgan belgilar to'plamiga kodlash kerak. Buning uchun maxsus encodeRedirectURL(String url) usuli mavjud. Shu usuldan foydalaning.
Redirect misoli:
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String newUrl = "http://google.com?q=O'rganishni davom ettir!";
String redirectUrl = response.encodeRedirectURL(newUrl);
response.sendRedirect(redirectUrl);
}
}
3.3 getWriter() usuli
Endi bizning matnni javobning tanasi sifatida yozishni o'rganamiz. Buning uchun HttpServletResponse klassida getWriter() deb ataladigan maxsus usul mavjud bo'lib, u PrintStream obyektini qaytaradi. Agar kimdir unutgan bo'lsa, bu System.out ismli maydon turidagi obyekt.
Servlet javobi sifatida matn yozish uchun:
- PrintStream obyektini
response.getWriter()usulini chaqirish orqali oling. - PrintStream obyektiga kerakli narsalarni yozing (barcha ma'lumotlar bufferga yoziladi).
- Bufferni foydalanuvchiga yuboring, PrintStream'da
close()usulini chaqirish orqali.
Ikki son a va b ni qo'shib foydalanuvchiga natijani qaytaradigan servlet yozamiz:
public class CalculatorServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// So'rovdan “a” va “b” parametrlarini olish
String a = request.getParameter("a");
String b = request.getParameter("b");
try {
// Matnni raqamlarga aylantirib yig'indini hisoblash
int sum = Integer.parseInt(a) + Integer.parseInt(b);
// HTML-ni brauzer uchun javob sifatida chiqarish
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head> <title> CalculatorServlet </title> </head>");
out.println("<body>");
out.println("<h1> Sum == " + sum + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
GO TO FULL VERSION