4.1 HttpSession चा परिचय

जर एकाच क्लायंटकडून अनेक विनंत्या आल्या, तर ते म्हणतात की क्लायंट आणि सर्व्हरमध्ये एक सत्र स्थापित केले गेले आहे. ही प्रक्रिया नियंत्रित करण्यासाठी, कंटेनरमध्ये एक विशेष HttpSession ऑब्जेक्ट आहे.

जेव्हा एखादा क्लायंट सर्व्हलेटला विनंती करतो तेव्हा सर्व्हलेट कंटेनर विनंतीमध्ये सत्र आयडी पॅरामीटर आहे की नाही हे तपासतो. असे कोणतेही पॅरामीटर नसल्यास (उदाहरणार्थ, क्लायंट प्रथमच सर्व्हरशी संपर्क साधत आहे), तर सर्व्हलेट कंटेनर नवीन HttpSession ऑब्जेक्ट तयार करतो आणि त्याला एक अद्वितीय आयडी देखील नियुक्त करतो.

सत्र ऑब्जेक्ट सर्व्हरवर संग्रहित केला जातो आणि आयडी क्लायंटला प्रतिसादात पाठविला जातो आणि क्लायंटवर कुकीमध्ये डीफॉल्ट संग्रहित केला जातो. त्यानंतर, जेव्हा त्याच क्लायंटकडून नवीन विनंती येते, तेव्हा सर्व्हलेट कंटेनर त्यातून आयडी पुनर्प्राप्त करतो आणि त्या आयडीद्वारे सर्व्हरवर योग्य HttpSession ऑब्जेक्ट सापडतो.

तुम्ही विनंती (HttpServletRequest ऑब्जेक्ट) वरून सत्र ऑब्जेक्ट मिळवू शकता, ज्यावर तुम्हाला getSession() पद्धत कॉल करणे आवश्यक आहे. हे HttpSession ऑब्जेक्ट परत करते.

सत्राची आवश्यकता का आहे? हे कॉल दरम्यान क्लायंटबद्दल माहिती संचयित करू शकते. तिच्या आत हॅशमॅपसारखे काहीतरी आहे, ज्यामध्ये तुम्ही किल्लीद्वारे वस्तू संग्रहित करू शकता. आणि यासाठी काही पद्धती:

पद्धती वर्णन
setAttribute(String name, Object o) सत्रामध्ये ऑब्जेक्ट जोडते
2 getAttribute(String name) सत्रातून एक ऑब्जेक्ट मिळवते
3 removeAttribute(String name) सत्रातून ऑब्जेक्ट काढून टाकते

चला एक सर्व्हलेट लिहू या जे वेगवेगळ्या विनंत्यांमधून पास केलेल्या सर्व संख्यांची बेरीज करेल:

public class CalculatorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         // Get the "sum" attribute from the session
        HttpSession session = request.getSession();
        Integer sum = (Integer) session.getAttribute("sum");
        //Handling the situation when the session does not yet have such an attribute
        if (sum == null)
            sum = 0;

         // Get the "n" parameter from the request
        String n = request.getParameter("n");
        sum += Integer.parseInt(n);

         // Write the "sum" attribute to the session
        session.setAttribute("sum", sum);

        // Print the HTML as a response to the browser
        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 बद्दल अधिक

HttpSession ऑब्जेक्टबद्दल आम्ही अजून काही सांगितले नाही का?

प्रथम, ते नाव जे सत्र आयडी आहे. त्या अंतर्गत सत्र आयडी कुकीजमध्ये संग्रहित केला जातो. तुम्ही बघू शकता, हे लक्षात ठेवणे खूप सोपे आहे: J+SESSION+ID.

दुसरे म्हणजे, सत्रात आणखी काही उपयुक्त पद्धती आहेत:

पद्धती वर्णन
getAttributeNames() सत्रामध्ये संचयित केलेल्या सर्व कीची सूची मिळवते
2 getId() सत्र आयडी (स्ट्रिंग) मिळवते
3 isNew() वर्तमान विनंतीमध्‍ये सेशन ऑब्‍जेक्‍ट तयार केले असल्‍यास खरे मिळवते
4 setMaxInactiveInterval(int seconds) सत्र निष्क्रियता अंतराल सेकंदांमध्ये सेट करते
invalidate() सत्रातील सर्व ऑब्जेक्ट्स काढून टाकते

येथे सर्व पद्धती स्पष्ट आहेत, परंतु setMaxInactiveInterval()आम्ही थोडे अधिक बोलू.

जर सर्व्हरने गेल्या महिन्यात भेट दिलेल्या क्लायंटच्या डेटासह हजारो सत्रे संग्रहित केली, तर ती फक्त मेमरी संपेल. म्हणून, "सत्र आजीवन" सेट करण्याचा एक मार्ग आहे.

जर कोणीही वेळेच्या मध्यांतरासाठी सत्र वापरले नाही, तर ते स्वतःच साफ होते - ते संचयित केलेल्या सर्व वस्तू त्यातून हटविल्या जातात. हे मेमरी जतन करण्यासाठी केले जाते.

डीफॉल्टनुसार, हे अंतर 1800 सेकंद == 30 मिनिटे आहे. जर तुम्ही मूल्य -1 वर सेट केले, तर सत्र "शाश्वत" असेल आणि जेव्हा वापरकर्ता ब्राउझर टॅब बंद करेल तेव्हाच हटवले जाईल (चांगले, किंवा क्लायंट डिस्कनेक्ट होईल).

उदाहरणे:

// get all keys
Enumeration keys = session.getAttributeNames();
while( keys.hasMoreElements() ){
    System.out.println( (String) keys.nextElement() );
}
// set the inactivity interval
session.setMaxInactiveInterval(60*60*24);   // 1 day
session.setMaxInactiveInterval(-1); // until the browser is closed
// remove all data from the session
session.invalidate();