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();