Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 419
Ильдар Шаукатович Хабибуллин
ck.setMaxAge(60*60*24*183); // Cookie будет существовать полгода
resp.addCookie(ck);
Прочитать cookie из запроса клиента можно методом
public Cookie[] getCookies(); интерфейса HttpServletRequest.
Вот обычная последовательность действий по чтению cookie:
int id = 0;
Cookie[] cks = req.getCookies();
if (cks != null)
for (int i = 0; i < cks.length; i++)
if (cks[i].getName().equals("studentid")){ id = Integer.parseInt(cks[i].getValue()); break;
Использовать cookie удобно, но беда в том, что многие клиенты запрещают запись cookie-файлов, справедливо полагая, что нельзя записывать что-либо на диск без ведома хозяина.
Второе средство — параметр в строке URL (rewriting URL) — просто записывает в первую строку запроса после имени ресурса идентификатор клиента, например:
GET /some.com/InfoAppl/index.html?jsessionid=12345678 HTTP/1.1
Это тоже хороший способ, но клиент может сам формировать строку запроса, например, просто набирая ее в поле адреса браузера и забывая об идентификаторе.
Третье средство — скрытое поле HTML-формы — это поле
<input type="hidden" name="studentid" value="12345678">
в которое можно записать идентификатор клиента. Для применения данного средства надо на каждой странице HTML создавать форму.
Итак, какого-то одного универсального средства, для того чтобы создать сеанс связи с Web-сервером, нет. В пакет javax.servlet.http внесены интерфейсы и классы для облегчения распознавания клиента. Они автоматически переключаются с одного средства на другое. Если запрещены cookies, то формируется идентификатор клиента в строке URL и т. д.
Основу средств создания сеанса связи с клиентом составляет интерфейс HttpSession. Объект типа HttpSession формируется контейнером сервлета при получении запроса, а получить или создать его можно методом
public HttpSession getSession(boolean create);
описанным в интерфейсе HttpServletRequest. Метод возвращает объект типа HttpSession, если он существует. Если же такой объект отсутствует, то поведение метода зависит от значения аргумента create — если он равен false, то метод возвращает null, если true — создает новый объект.
Второй метод того же интерфейса
public HttpSession getSession(); эквивалентен getSession(true).
Логическим методом
public boolean isNew();
интерфейса HttpSession можно узнать, новый ли это, только что созданный сеанс (true) или продолжающийся, уже запрошенный клиентом (false).
В сеансе отмечается время его создания и время последнего запроса, которые можно получить методами
public long getCreationTime(); public long getLastAccessedTime();
Они возвращают время в миллисекундах, прошедших с полуночи 1 января 1970 года (дата рождения UNIX).
Создавая сеанс, контейнер дает ему уникальный идентификатор. Метод
public String getId();
возвращает идентификатор сеанса в виде строки.
У сеанса могут быть атрибуты, в качестве которых способны выступать любые объекты Java. Атрибут задается методом
public void setAttribute(String name, Object value);
Получить имена и значения атрибутов можно методами
public Enumeration getAttributeNames(); public Object getAttribute(String name);