Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


SessionLogic.printToBrowser(resp, req);




}

}

package chapt21;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class SessionLogic {

 

public static void printToBrowser(

HttpServletResponse resp, HttpServletRequest req) {

try {

/* возвращается ссылка на сессию для текущего пользователя (если сессия еще не существует, то она при этом создается) */

HttpSession session = req.getSession(true);

 

PrintWriter out = resp.getWriter();

 

StringBuffer url = req.getRequestURL();

session.setAttribute("URL", url);

 

out.write("My session counter: ");

/* количество запросов, которые были сделаны к данному сервлету текущим пользователем в рамках текущей пользовательской сессии (следует приводить значение к строковому виду для корректного отображения в результате) */

out.write(String.valueOf(prepareSessionCounter(session)));

out.write("<br> Creation Time: "

+ new Date(session.getCreationTime()));

out.write("<br> Time of last access: "

+ new Date(session.getLastAccessedTime()));

out.write("<br> session ID: "

+ session.getId());

out.write("<br> Your URL: " + url);

int timeLive = 60 * 30;

session.setMaxInactiveInterval(timeLive);

out.write("<br>Set max inactive interval: "

+ timeLive + "sec");

 

out.flush();

out.close();

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("Failed: " + e);

}

}

/* увеличивает счетчик обращений к текущему сервлету и кладет его в сессию */

private static int prepareSessionCounter(

HttpSession session) {

Integer counter =

(Integer)session.getAttribute("counter");

 

if (counter == null) {

session.setAttribute("counter", 1);

return 1;

} else {

counter++;

session.setAttribute("counter", counter);

return counter;

}

}

}

В результате в браузер будет выведено:

My session counter: 3
Creation Time: Sun Jan 29 16:02:30 EET 2006
Time of last access: Sun Jan 29 16:02:38 EET 2006
session ID: 314A546CD9270A840E0BDA3286636B20
Your URL: http://localhost:8080/FirstProject/SessionServlet
Set max inactive interval: 1800sec

В качестве данных сеанса выступают: счетчик кликов – объект типа Integer и URL запроса, сохраненный в объекте StringBuffer. В ответ на поль­зовательский запрос сервлет SessionServlet возвращает страницу HTML, на которой отображаются все атрибуты сессии, время создания и последнего доступа, идентификационный номер сессии и время инвалидации (жизни) сессии. Это время можно задать с помощью тега session-config в web.xml в виде:

<session-config>

<session-timeout>30</session-timeout>

</session-config>

где время ожидания задается в минутах.

В следующем примере рассмотрен процесс ликвидации сессии при отсутствии активности за определенный промежуток времени.

/* пример # 2: инвалидация и ликвидация сессии: TimeSessionServlet.java */

package chapt21;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TimeSessionServlet extends HttpServlet {

boolean flag = true;

 

protected void doGet(HttpServletRequest req,

HttpServletResponse resp)

throws ServletException {

performTask(req, resp);

}

private void performTask(HttpServletRequest req,

HttpServletResponse resp) throws ServletException {

 

HttpSession session = null;

if (flag) {

//создание сессии и установка времени инвалидации

session = req.getSession();

int timeLive = 10; //десять секунд!

session.setMaxInactiveInterval(timeLive);

flag = false;

} else {

//если сессия не существует, то ссылка на нее не будет получена

session = req.getSession(false);

}

TimeSession. go (resp, req, session);

}

}

package chapt21;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class TimeSession {

 

public static void go(HttpServletResponse resp, HttpServletRequest req, HttpSession session) {

PrintWriter out = null;

try {

out = resp.getWriter();

out.write("<br> Creation Time: "

+ new Date(session.getCreationTime()));

out.write("<br> Session alive! ");

 

out.flush();

out.close();

} catch (NullPointerException e) {

//если сессия не существует, то генерируется исключение

if (out!= null)

out.print("Session disabled!");

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("i/o failed: " + e);

}

}

}

При первом запуске в браузер будет выведено:

Creation Time: Tue Aug 14 17:54:23 EEST 2007
Session alive!

Если повторить запрос к сервлету менее чем за 10 секунд, вывод будет повторен. Если же запрос повторить более через десять секунд, сессия будет автоматически уничтожена, и в браузер будет выведено следующее:

Session disabled!

Cookie

Для хранения информации на компьютере клиента используются возможности класса Cookie.

Cookie – это небольшие блоки текстовой информации, которые сервер посылает клиенту для сохранения в файлах cookies. Клиент может запретить браузеру прием файлов cookies. Браузер возвращает информацию обратно на сервер как часть заголовка HTTP, когда клиент повторно заходит на тот же Web-ресурс. Cookies могут быть ассоциированы не только с сервером, но и также с доменом – в этом случае браузер посылает их на все серверы указанного домена. Этот принцип лежит в основе одного из протоколов обеспечения единой идентификации пользователя (Single Signon), где серверы одного домена обмениваются идентификационными маркерами (token) с помощью общих сookies.

Cookie были созданы в компании Netscape как средства отладки, но теперь используются повсеместно. Файл cookie – это файл небольшого размера для хранения информации, который создается серверным приложением и размещается на компьютере пользователя. Браузеры накладывают ограничения на размер файла cookie и общее количество cookie, которые могут быть установлены на пользовательском компьютере приложениями одного Web-сервера.

Чтобы послать cookie клиенту, сервлет должен создать объект класса Cookie, указав конструктору имя и значение блока, и добавить их в объект-response. Конструктор использует имя блока в качестве первого параметра, а его значение – в качестве второго.

Cookie cookie = new Cookie( " myid ", " 007 " );





Поделиться с друзьями:


Дата добавления: 2016-04-03; Мы поможем в написании ваших работ!; просмотров: 416 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2493 - | 2164 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.