4.1 Pambuka kanggo HttpSession

Yen sawetara panjaluk teka saka klien sing padha, mula dheweke ujar manawa ana sesi ing antarane klien lan server. Kanggo ngontrol proses iki, wadhah kasebut duwe obyek HttpSession khusus.

Nalika klien nggawe panjalukan kanggo servlet, wadhah servlet mriksa kanggo ndeleng yen parameter ID sesi ana ing panyuwunan kasebut. Yen ora ana parameter kasebut (contone, klien ngubungi server kanggo pisanan), banjur wadhah servlet nggawe obyek HttpSession anyar lan uga menehi ID unik.

Objek sesi disimpen ing server, lan ID dikirim ing respon kanggo klien, lan minangka standar disimpen ing klien ing cookie. Banjur, nalika panjaluk anyar teka saka klien sing padha, wadhah servlet njupuk ID kasebut, lan ID kasebut nemokake obyek HttpSession sing bener ing server.

Sampeyan bisa njaluk obyek sesi saka panjalukan (obyek HttpServletRequest), sing sampeyan kudu nelpon getSession () cara. Iki ngasilake obyek HttpSession.

Napa sesi dibutuhake? Bisa nyimpen informasi babagan klien ing antarane telpon. Dheweke duwe kaya HashMap ing njero, ing ngendi sampeyan bisa nyimpen obyek kanthi tombol. Lan sawetara cara kanggo iki:

Metode Katrangan
1 setAttribute(String name, Object o) Nambahake obyek menyang sesi
2 getAttribute(String name) Entuk obyek saka sesi
3 removeAttribute(String name) Mbusak obyek saka sesi

Ayo nulis servlet sing bakal nyimpulake kabeh nomer sing diterusake saka macem-macem panjalukan:

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 Liyane babagan HttpSession

Apa ana liyane sing durung kita ucapake babagan obyek HttpSession?

Pisanan, iku jeneng J SESSION ID. Ing ngisor iki, ID sesi disimpen ing cookie. Nalika sampeyan bisa ndeleng, iku cukup gampang kanggo elinga J+SESSION+ID:.

Kapindho, sesi kasebut duwe sawetara cara sing luwih migunani:

Metode Katrangan
1 getAttributeNames() Ngasilake dhaptar kabeh kunci sing disimpen ing sesi kasebut
2 getId() Ngasilake ID sesi (string)
3 isNew() Ngasilake bener yen obyek sesi digawe ing panjalukan saiki
4 setMaxInactiveInterval(int seconds) Nyetel interval ora aktif sesi ing sawetara detik
5 invalidate() Mbusak kabeh obyek saka sesi

Ing kene kabeh cara jelas, nanging setMaxInactiveInterval()kita bakal ngomong babagan liyane.

Yen server nyimpen puluhan ewu sesi, kalebu data klien sing dibukak sasi kepungkur, banjur mung bakal kehabisan memori. Mulane, ana cara kanggo nyetel "umur sesi".

Yen ora ana sing nggunakake sesi kasebut sajrone interval wektu, mula bakal mbusak dhewe - kabeh obyek sing disimpen bakal dibusak saka iku. Iki ditindakake kanggo ngirit memori.

Kanthi gawan, interval iki 1800 detik == 30 menit. Yen sampeyan nyetel nilai kanggo -1, banjur sesi bakal "langgeng" lan bakal dibusak mung nalika pangguna nutup tab browser (uga, utawa klien pedhot).

Tuladha:

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