4.1 HttpSession அறிமுகம்

ஒரே கிளையண்டிலிருந்து பல கோரிக்கைகள் வந்தால், கிளையன்ட் மற்றும் சர்வர் இடையே ஒரு அமர்வு நிறுவப்பட்டதாக அவர்கள் கூறுகிறார்கள். இந்த செயல்முறையை கட்டுப்படுத்த, கொள்கலனில் ஒரு சிறப்பு HttpSession பொருள் உள்ளது.

ஒரு கிளையன்ட் ஒரு servlet க்கு கோரிக்கை வைக்கும் போது, ​​servlet கொள்கலன் கோரிக்கையில் அமர்வு ஐடி அளவுரு உள்ளதா என்று பார்க்கிறது. அத்தகைய அளவுரு இல்லை என்றால் (உதாரணமாக, கிளையன்ட் முதல் முறையாக சேவையகத்தைத் தொடர்புகொள்கிறார்), பின்னர் servlet கொள்கலன் ஒரு புதிய HttpSession பொருளை உருவாக்குகிறது மற்றும் அதற்கு ஒரு தனிப்பட்ட ஐடியையும் ஒதுக்குகிறது.

அமர்வு பொருள் சேவையகத்தில் சேமிக்கப்படுகிறது, மேலும் ஐடி கிளையண்டிற்கு பதில் அனுப்பப்படும், மேலும் இயல்பாக கிளையண்டில் குக்கீயில் சேமிக்கப்படும். பின்னர், அதே கிளையண்டிலிருந்து ஒரு புதிய கோரிக்கை வரும்போது, ​​servlet கொள்கலன் அதிலிருந்து ஐடியை மீட்டெடுக்கிறது, மேலும் அந்த ஐடியின் மூலம் சர்வரில் சரியான HttpSession பொருளைக் கண்டறியும்.

நீங்கள் ஒரு கோரிக்கையிலிருந்து அமர்வு பொருளைப் பெறலாம் (ஒரு HttpServletRequest பொருள்), அதில் நீங்கள் getSession() முறையை அழைக்க வேண்டும். இது ஒரு HttpSession பொருளை வழங்குகிறது.

ஒரு அமர்வு ஏன் தேவைப்படுகிறது? இது அழைப்புகளுக்கு இடையில் கிளையன்ட் பற்றிய தகவல்களை சேமிக்க முடியும். அவளிடம் ஹாஷ்மேப் போன்ற ஒன்று உள்ளது, அதில் நீங்கள் சாவி மூலம் பொருட்களை சேமிக்க முடியும். மற்றும் இதற்கான சில வழிமுறைகள்:

முறைகள் விளக்கம்
1 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. அதன் கீழ்தான் அமர்வு ஐடி குக்கீகளில் சேமிக்கப்படுகிறது. நீங்கள் பார்க்க முடியும் என, நினைவில் கொள்வது மிகவும் எளிதானது: J+SESSION+ID.

இரண்டாவதாக, அமர்வில் இன்னும் சில பயனுள்ள முறைகள் உள்ளன:

முறைகள் விளக்கம்
1 getAttributeNames() அமர்வில் சேமிக்கப்பட்ட அனைத்து விசைகளின் பட்டியலை வழங்கும்
2 getId() அமர்வு ஐடியை (சரம்) வழங்கும்
3 isNew() தற்போதைய கோரிக்கையில் அமர்வுப் பொருள் உருவாக்கப்பட்டிருந்தால் சரி எனத் தருகிறது
4 setMaxInactiveInterval(int seconds) அமர்வு செயலற்ற இடைவெளியை நொடிகளில் அமைக்கிறது
5 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();