- •Основні відомості про сервлети і JavaServer Pages
- •Базова структура сервлетів
- •Життєвий цикл сервлета
- •Метод init
- •Метод service
- •Інтерфейс SingleThreadModel
- •Метод destroy
- •Обробка клієнтських запитів
- •Заголовки http-запиту
- •Коди станів http
- •Заголовки http-відповіді
- •Обробка cookies
- •Атрибути cookie
- •Відслідкування сеансу
- •Отримання інформації про сеанс
- •Перегляд інформації про сеанс
- •Кодування адрес url, надісланих клієнту
- •Елементи сценарію jsp
- •Вирази jsp
- •Скриплети jsp
- •Оголошення jsp
- •Інші наперед визначенізмінні
- •Директива сторінки jsp
- •Включення файлів і аплетів у документи jsp
- •Використання JavaBeans з jsp
- •Основи використання bean-компонентів
- •Доступ до властивостей bean-компонентів
- •Сумісне використання bean-компонентів
- •Робота з базами даних
- •Завантаження тареєстрація драйвера
- •Визначення url для встановлення з’єднання
- •Встановлення з’єднання
- •Створення об’єкту для передачі операторів sql
- •Формування запиту для виконання
- •Виконання запиту
- •Обробка результатів
- •Завершення з’єднання
- •Попередньо відкомпільовані (підготовлені) запити
- •Пакетне виконання sql запитів
- •Виконання внутрішніх процедур
- •Інтегрування сервлетів і jsp-сторінок Перенаправлення запитів із сервлетів
- •Передача інформації на сторінки призначення
- •Перенаправлення запитів з jsp-сторінок
- •Використання аплетів у якості клієнтських інтерфейсів сервлетів
Коди станів 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, які браузер пов’язав з вашим сайтом.