Jak sesja jest automatycznie tworzona na mojej stronie jsp, jeśli nie utworzyłem obiektu sesji ręcznie?

Jestem początkującym użytkownikiem jsp & servlet. Uczę się w nim obsługi sesji.

Zrobiłem prosty program, który ma 3 strony jsp, w których jedna strona jsp ma hiperłącze do strony jsp 2. jsp strona 2 sprawdza, czy istnieje jakakolwiek istniejąca sesja, jeśli tak, to wysyła kontrolę do jsp na stronie 3 używając dyspozytora. Ale jeśli obiekt sesji ma wartość NULL, tworzy nową sesję i ustawia do niej atrybuty, a następnie wysyła kontrolę do jsp na stronie 3 przy użyciu programu rozsyłającego.

Poniżej znajduje się kod wszystkich stron 3 jsp;

test1.jsp (kod dla strony jsp 1)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="test2.jsp"> start here</a>

</body>
</html>

test2.jsp (kod dla strony jsp 2)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
HttpSession ses=request.getSession(false);

if(ses==null){
    System.out.println("Session is null creating new session ");
%>
    Session is null creating new session.
<%
    //Usersession objusersession=new Usersession();
    ses=request.getSession(false);
    request.setAttribute("a", "This");
    ses.setAttribute("name", "sandip"); 
    System.out.println("Session created and attributes are set now dispatching");
    %>
    Session created and attributes are set now dispatching
<%
    response.sendRedirect("test3.jsp");
    //dispatch.forward(request, response);
}else{
    System.out.println("Session is old then dispatching");
    %>
    Session is old then dispatching
<%
    response.sendRedirect("test3.jsp");
    //RequestDispatcher dispatch=request.getRequestDispatcher("test3.jsp");
    //dispatch.forward(request, response);
}
%>
<a href="test.jsp"> Click here</a>
</body>
</html> 

test3.jsp (kod dla strony jsp 3)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
HttpSession ses=request.getSession();
if(!session.isNew()){
    //Usersession objusersession=new Usersession();
    //ses.setAttribute("name", "sandip");
    //request.getAttribute("a");
    //System.out.println(request.getAttribute("a"));
    System.out.println(ses.getAttribute("name"));
    %>
    printed the session attribute value on console.
<%
}else{
    response.sendRedirect("test1.jsp");
}   
%>
</body>
</html>

W powyższym kodzie, gdy bezpośrednio wywołujemy sekwencję, jest następujący

1) Wywołaj test1.jsp, który ma hiperłącze do test2.jsp 2) Po kliknięciu hiperłącza wywołuje test2.jsp. W pliku test2.jsp3 sprawdza istniejącą sesję. Jeśli go znajdzie, powinien bezpośrednio wywołać test3.jsp, ale jeśli sesja prefiksowania nie istnieje, to powinna utworzyć nową sesję i ustawić dla niej atrybut oraz wywołać test3.jsp, który wypisuje tę wartość atrybutów na konsoli.

W moim przypadku, gdy wywołam test1.jsp po raz pierwszy i klikam hiperłącze, wywołuje test2.jsp i zakłada, że ​​sesja już istnieje i bezpośrednio wywołuje test3.jsp. Ale w rzeczywistości sesja nie jest uruchamiana ani na test1.jsp, ani na test2.jsp, chyba że wprowadzi blok if w test2.jsp. Moje zapytanie brzmi wtedy, jak sesja jest automatycznie tworzona w mojej aplikacji?

Jestem pewien, że albo robię złe kodowanie, albo źle rozumiem pojęcie.

Wymieniłem również stronę test2.jsp serwletem, który wykonuje to samo zadanie, co dawka strony test2.jsp, ale nadal otrzymuję ten sam wynik.

Chcę zapytać ekspertów, powiedz mi, co dokładnie się dzieje. Dziękuję Ci!

questionAnswers(1)

yourAnswerToTheQuestion