Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 418
Ильдар Шаукатович Хабибуллин
"image/jpeg" : "image/gif";
resp.setContentType(ctype);
try{
BufferedInputStream bis = new BufferedInputStream( new FileInputStream(curFile));
Outputstream os = resp.getOutputStream();
int cur = 0;
while ((cur = bis.read()) != -1) os.write(cur);
os.close(); bis.close();
}catch(FileNotFoundException e){
resp.sendError(HttpServletResponse.SC NOT FOUND);
}catch(Exception e){
resp.sendError(HttpServletResponse.SC SERVICE UNAVAILABLE);
}
curIndex= (curIndex + 1) % len;
}else resp.sendError(HttpServletResponse.SC SERVICE UNAVAILABLE); } public long getLastModified(){
return System.currentTimeMillis();
}
}
Сеанс связи с сервлетом
Сервер HTTP не сохраняет информацию о клиенте, связавшемся с ним. Хотя TCP-соединение может сохраняться вплоть до его явного закрытия (persistent HTTP connection) и за это время можно передать несколько запросов и ответов, протокол HTTP не предполагает средств сохранения информации о клиенте.
Многие задачи, решаемые Web-приложениями, требуют знания сведений о клиенте. Например, клиент электронного магазина может сделать несколько заказов в течение дня или даже нескольких дней. Сервер должен знать, в чью "корзину" складывать заказанные покупки. Еще пример. В программе листинга 26.5 завязывается диалог. Клиент регистри-
руется и посылает сведения о себе на сервер СДО. Сервер предлагает клиенту подобрать себе учебный курс. Клиент выбирает курс и посылает его название серверу. Сервер должен занести имя курса в учетную карточку клиента, а для этого ему надо знать регистрационный номер клиента.
Для получения сведений о клиенте, приславшем запрос, приходится применять искусственные средства, не входящие в протокол HTTP. Наиболее часто используются три средства: cookie, параметр в строке URL и скрытое поле в HTML-форме.
Первое средство — cookie — действует так. Получив первый запрос, сервер составляет заголовок ответа Set-Cookie, в который заносит пару "имя = значение", обычно это идентификатор клиента, а также диапазон URL, для которого действует cookie, срок хранения этих сведений и другую информацию. Браузер, получив ответ с таким заголовком, создает небольшой, размером не более 4 Кбайт, cookie-файл с этими сведениями и сохраняет его у себя в каталоге. Посылая следующие запросы, браузер отыскивает у себя соответствующий cookie-файл и заносит в заголовок Cookie запроса пару "имя = значение". Сервер по этому заголовку "узнает" клиента.
В пакете javax.servlet.http есть класс Cookie, методы которого обеспечивают работу с cookie. Объект этого класса создается конструктором
public Cookie(String name, String value);
Методы setXxx () позволяют добавить в объект остальные сведения, а методы getXxx () прочитать их.
После создания и формирования объекта cookie этот объект устанавливается в заголовок ответа методом
public void addCookie(Cookie cookie); интерфейса HttpServletResponse.
Вот обычная последовательность действий по созданию cookie и отправке его клиенту:
String value = "" + id;
Cookie ck = new Cookie("studentid", value);