4.1 HttpSession bilan tanishuv
Agar bir nechta so'rovlar bitta mijozdan kelib tushsa, mijoz va server o'rtasida sessiya o'rnatilgan, deyiladi. Bu jarayonni boshqarish uchun konteynerda maxsus HttpSession obyekti mavjud.
Mijoz servletga murojaat qilganda, servletlar konteyneri so'rovda sessiya ID parametri mavjudligini tekshiradi. Agar bunday parametr yo'q bo'lsa (masalan, mijoz birinchi marta serverga murojaat qilsa), u holda servletlar konteyneri yangi HttpSession obyekti yaratadi va unga noyob ID tayinlaydi.
Sessiya obyekti serverda saqlanadi, ID esa mijozga javob bo'lib yuboriladi va odat bo'yicha mijozning cookies-da saqlanadi. Keyin, shu mijozdan yangi so'rov kelganda, servletlar konteyneri undagi ID ni chiqarib oladi va shu ID bo'yicha serverdagi to'g'ri HttpSession obyektini topadi.
Sessiya obyektini so'rovdan (HttpServletRequest obyekti) olish mumkin, unda getSession() metodini chaqirish kerak. U HttpSession obyektini qaytaradi.
Sessiya nima uchun kerak? Unda mijoz haqidagi ma'lumotlarni chaqiriqlar orasida saqlash mumkin. Uning ichida bir yoki bir nechta HashMap yoki unga o'xshash narsa mavjud bo'lib, unda ob'ektlarni kalitlar bo'yicha saqlash mumkin. Bu uchun bir nechta metodlar mavjud:
| Metodlar | Tavsif | |
|---|---|---|
| 1 | setAttribute(String name, Object o) |
Obyektni sessiyaga qo'shadi |
| 2 | getAttribute(String name) |
Obyektni sessiyadan oladi |
| 3 | removeAttribute(String name) |
Obyektni sessiyadan olib tashlaydi |
Keling, turli so'rovlardan yuborilgan sonlarni jamlovchi servlet yozamiz:
public class CalculatorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
// Sessiyadan “sum” atributini olamiz
HttpSession session = request.getSession();
Integer sum = (Integer) session.getAttribute("sum");
//Agar sessiyada bunday atribut mavjud bo'lmasa, holatni qayta ishlaymiz
if (sum == null)
sum = 0;
// So'rovdan “n” parametrini olamiz
String n = request.getParameter("n");
sum += Integer.parseInt(n);
// Sessiyaga “sum” atributini yozamiz
session.setAttribute("sum", sum);
// Brauzer uchun javob sifatida HTML-ni chiqaramiz
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>");
}
}
4.2 HttpSession haqida batafsil
HttpSession obyekti haqida yana nima muhim narsa aytilmagan?
Birinchidan, bu JSESSIONID nomi. Aynan shu nom bilan cookies-da sessiya ID saqlanadi. Ko'rib turganingizdek, uni eslab qolish oson: J+SESSION+ID.
Ikkinchidan, sessiyada yana bir nechta foydali metodlar mavjud:
| Metodlar | Tavsif | |
|---|---|---|
| 1 | getAttributeNames() |
Sessiyada saqlanayotgan barcha kalitlar ro'yxatini qaytaradi |
| 2 | getId() |
ID-sessiyani (qator) qaytaradi |
| 3 | isNew() |
Agar sessiya obyekti joriy so'rovda yaratilgan bo'lsa, true qaytaradi |
| 4 | setMaxInactiveInterval(int seconds) |
Sessiyaning nofaollik intervalini soniyada o'rnatadi |
| 5 | invalidate() |
Sessiyadagi barcha ob'ektlarni olib tashlaydi |
Bu yerda barcha metodlar tushunarli, ammo setMaxInactiveInterval() haqida batafsilroq gaplashamiz.
Agar server minglab sessiyalarni, shu jumladan, o'tgan oyda unga kirgan mijozlar ma'lumotlarini saqlasa, oddiygina xotira tugaydi. Shuning uchun "sessiya umrini" o'rnatish usuli mavjud.
Agar interval davomida sessiya ishlatilmagan bo'lsa, u o'z-o'zidan tozalanadi — unda saqlangan barcha ob'ektlar olib tashlanadi. Bu xotirani tejash uchun qilingan.
Odat bo'yicha bu interval 1800 soniya == 30 daqiqaga teng. Agar -1 qiymati o'rnatilsa, sessiya "abadiy" bo'ladi va faqat foydalanuvchi brauzer yorlig'ini yopganda (yoki mijoz ulanishni uzganda) olib tashlanadi.
Misollar:
|
|
|
GO TO FULL VERSION