Сессии были введены в предыдущем разделе, посвященном сервлетам и также доступны в JSP. Следующие примеры исследуют сессионные объекты и позволяют вам манипулировать промежутком времени, прежде, чем сессия станет недействительной.
//:! c15:jsp:SessionObject.jsp <%-- Получение и установка значений объекта сессии --%> <html><body> <H1>Session id: <%= session.getId() %></H1> <H3> <li>This session was created at <%= session.getCreationTime() %> </li> </H1> <H3> <li> Old MaxInactiveInterval = <%= session.getMaxInactiveInterval() %> </li> <% session.setMaxInactiveInterval(5); %> <li> New MaxInactiveInterval= <%= session.getMaxInactiveInterval() %> </li> </H3> <H2>If the session object "My dog" is still around, this value will be non-null:<H2> <H3> <li> Session value for "My dog" = <%= session.getAttribute("My dog") %> </li> </H3> <%-- Теперь добавим объект сессии "My dog" --%> <% session.setAttribute("My dog", new String("Ralph")); %> <H1>My dog's name is <%= session.getAttribute("My dog") %></H1> <%-- See if "My dog" wanders to another form --%> <FORM TYPE=POST ACTION=SessionObject2.jsp> <INPUT TYPE=submit name=submit Value="Invalidate">< /FORM> <FORM TYPE=POST ACTION=SessionObject3.jsp> <INPUT TYPE=submit name=submit Value="Keep Around"> </FORM> </body></html> ///:~
Объект сессии предоставляется по умолчанию, так что он доступен без дополнительного кода. Вызов getID( ), getCreationTime( ) и getMaxInactiveInterval( ) используются для отображения информации об этом сессионном объекте.
Когда вы в первый раз получите эту сессию, вы увидите, что MaxInactiveInterval составляет, например, 1800 секунд (30 минут). Это зависит от конфигурации вашего контейнера JSP/сервлетов. MaxInactiveInterval сокращается до 5 секунд, чтобы сделать вещи интереснее. Если вы перегрузите страницу до того, как истекут 5 секунд, то вы увидите:
Session value for "My dog" = Ralph
Но если вы подождете больший интервал, то "Ralph" станет null.
Чтобы посмотреть, как сессионная информация переносится на другие страницы, а также, чтобы посмотреть эффект становления объекта сессии недействительным по сравнению с простым вариантом, когда вы дали ему устареть, созданы две новые страницы. Первая (доступна при нажатии кнопки "invalidate" в SessionObject.jsp) читает сессионную информацию, а затем явно делает сессию недействительной:
//:! c15:jsp:SessionObject2.jsp <%-- Объект сессии переноситься --%> <html> <body> <H1>Session id: <%=session.getId()%></H1> <H1>Session value for "My dog" <%=session.getValue("My dog")%></H1> <% session.invalidate(); %> </body> </html> ///:~
Чтобы экспериментировать с этим, обновите SessionObject.jsp, затем сразу же кликните на кнопку "invalidate", чтобы перейти к странице SessionObject2.jsp. В этом месте вы все еще будете видеть "Ralph" и сразу после этого (прежде, чем пойдет интервал в 5 секунд), обновите SessionObject2.jsp, чтобы увидеть, что сессия была успешно сделана недействительной и "Ralph" исчез.
Если вы вернетесь на SessionObject.jsp, обновите страницу так, чтобы вы снова имели 5-ти секундный интервал, затем нажмете кнопку "Keep Around", то вы попадете на следующую страницу SessionObject3.jsp, которая не делает сессию недействительной:
//:! c15:jsp:SessionObject3.jsp <%-- Переход объекта сессии по страницам --%> <html> <body> <H1>Session id: <%=session.getId()%></H1> <H1>Session value for "My dog" <%=session.getValue("My dog")%></H1> <FORM TYPE=POST ACTION=SessionObject.jsp><INPUT TYPE=submit name=submit Value="Return"></FORM> </body> </html> ///:~
Поскольку эта страница не делает сессию недействительной, "Ralph" будет оставаться во время каждого обновления страницы до тех пор, пока не пройдет 5-ти секундный интервал между обновлениями. Это мало чем отличается от игрушки "Tomagotchi" - до тех пор, пока вы играете с "Ralph", он будет здесь, в противном случае он исчезнет.
← | Атрибуты JSP страницы и область видимости | Создание и изменение cookies | → |