Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection_servlets.doc
Скачиваний:
30
Добавлен:
23.02.2016
Размер:
356.35 Кб
Скачать

Коди станів http

Коли Web-сервер відповідає на запит клієнта, його відповідь звичайно складається з рядка стану, декількох заголовків відповіді, пустого рядка і документа, наприклад:

HTTP/1.1 200 OK

Content-Type: text/plain

Hello, World!

У рядку стану HTTP-відповіді знаходиться версія протоколу HTTP, код стану і відповідне йому повідомлення. Код стану встановлюється за допомогою методу setStatus(int code) класу HttpServletResponse. Виклик setStatus() повинен відбуватися перед поверненням будь-якого вмісту через об’єкт класу PrintWriter.

Для роботи з кодами станів існують два додаткових методи:

sendError(int code, String message) – надсилає код стану (звичайно 404) разом із коротким повідомленням, яке автоматично форматується всередині HTML-документа і надсилається клієнту.

sendRedirect(String url) – генерує відповідь з кодом стану 302 разом із заголовком Location, здаючи адресу URL нового документа.

Коди станів поділяються на 5 категорій:

100–199

Інформаційні коди. Вони показують, що клієнт повинен відповісти на повідомлення якою-небудь дією.

200–299

Запит був успішним

300–399

Використовуються для файлів, які були переміщені, і звичайно включають заголовок Location, що містить нову адресу

400–499

Повідомляють про помилки клієнта

500-599

Повідомляють про помилки сервера

Клас HttpServletResponse містить константи, які представляють різні коди. Наприклад, виклик

response.setStatus(response.SC_NO_CONTENT)

еквівалентний

response.setStatus(204).

Заголовки http-відповіді

Загальний спосіб завдання заголовків – це використання методу setHeader() класу HttpServletResponse. Параметрами цього методу є два рядки: ім’я заголовку і його значення. Як і у випадку завдання кодів стану, заголовки відповіді задаються перед поверненням документа.

Крім setHeader існують два спеціалізованих методи завдання заголовків, що містять дати і цілі значення:

setDateHeader(String header, long milliseconds)

setIntHeader(String header, int headerValue)

Протокол HTTP допускає декілька входжень у відповідь одного і того ж самого імені заголовку. Іноді простіше додати новий заголовок, ніж замінювати існуючий заголовок з тим самим ім’ям. У версії 2.2 і 2.3 методи setHeader(), setDateHeader(), setIntHeader() заміщують існуючі заголовки з таким самим іменем. Методи addHeader(), addDateHeader(), addIntHeader() додають новий заголовок, незалежно від того, чи існує заголовок із вказаним іменем. Якщо необхідно знати, чи існує заголовок з конкретним іменем, викликається метод boolean containsHeader(String header).

HttpServletResponseнадає ряд зручних методів для встановлення часто вживаних заголовків:

getContentLength

Задає Content-Length

getContentType

Задає Content-Type

addCookie

Додає cookie у заголовок Set-Cookie

sendRedirect

Задає заголовок Locationі встановлює код стану 302

Обробка cookies

Cookies – це невеликі блоки текстової інформації, які Web=сервер надсилає браузеру, а браузер повертає незмінними, коли пізніше відвідує той самий web-сайт. Дозволяючи серверу читати інформацію, яку він надіслав клієнтові раніше, сайт може надавати відвідувачам деякі послуги, наприклад, представляти сайт у тому вигляді, в якому відвідувач його раніше налагодив, або дозволити ідентифікованим відвідувачам вхід на сайт без вводу пароля.

Для того, щоб надіслати cookie клієнту, сервлет повинен створити один або декілька cookies зі вказаними іменами і значеннями за допомогою конструктора класу Cookie:

Потім можна задати будь-які необов’язкові атрибути через метод cookie.setXxx() (ці атрибути потім зчитує метод cookie.getXxx()) і вставити cookies в заголовки відповіді, викликавши метод response.addCookie(cookie). Щоб прочитати отримані cookies, сервлет повинен викликати метод request.getCookies(). Метод повертає масив об’єктів Cookie, відповідних тим cookies, які браузер пов’язав з вашим сайтом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]