ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
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 В качестве данных сеанса выступают: счетчик кликов – объект типа 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 Если повторить запрос к сервлету менее чем за 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 " ); Не нашли, что искали? Воспользуйтесь поиском:
|