JavaRush /Kurslar /All lectures for UZ purposes /Servlet javoblarini shakllantirish

Servlet javoblarini shakllantirish

All lectures for UZ purposes
Daraja, Dars
Mavjud

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();
        }
    }
}
 
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION