- •Основні відомості про сервлети і 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-сторінок
- •Використання аплетів у якості клієнтських інтерфейсів сервлетів
Сумісне використання bean-компонентів
Об’єкти, створені за допомогою дії jsp:usebean, не тільки прив’язуються до певної локальної змінної, але й зберігаються в одному з чотирьох місць, в залежності від значення необов’язкового атрибута scope. Цей атрибут має такі можливі значення:
page (значення по замовчуванню) – показує, що bean-компонент повинен поміщуватися в об’єкті класу PageContext на час поточного запиту. При цьому компонента доступна діям jsp:getProperty, jsp:setProperty, скриплетам або виразам, розташованим на даній сторінці;
application – bean-компонент поміщується в об’єкті класу ServletContext, який використовується сумісно всіма сервлетами одного web-додатку;
session – bean-компонент поміщується в об’єкті класу HttpSession, пов’язаним з поточним запитом;
request – bean-компонент поміщується в об’єкт класу ServletRequest на час обробки поточного запиту.
Для більш зручного сумісного використання bean-компонентів у деяких випадках елементи, пов’язані з компонентами bean, обчислюються умовно.
По-перше, дія jsp:useBean створює новий компонент лише у тому випадку, якщо ще не існує компонента з тим самим значенням атрибута id і той самою областю видимістю, визначеною атрибутом scope. Якщо такий об’єкт знаходиться, він просто зв’язується зі змінною, на яку посилається атрибут id.
По-друге, замість дії
<jsp:useBean … />
можна використати конструкцію
<jsp:useBean … >
//оператори
</jsp:useBean>
Друга форма використовується, якщо оператори між початковим і завершальним тегами jsp:useBean виконуються лише при створенні нового bean-компонента (а не при використанні вже існуючого). Таке умовне виконання зручне для завдання початкових значень властивостей bean-компонентів, які сумісно використовуються декількома сторінками. Оскільки невідомо, до якої сторінки відбудеться перше звернення, то невідомо і те, на якій сторінці повинен бути код ініціалізації. Отже, усі сторінки можуть містити даний код, але тільки та сторінка, до якої звернулися у першу чергу, виконає його.
Приклад:
<jsp:useBean id=”counter”
class=”AccessCountBean”
scope=”application”>
<jsp:setProperty name=”counter”
property=”firstPage”
value=”Current Page Name” />
</jsp:useBean>
The pages, using the counter have been accessed <jsp:getProperty name=”counter” property=”accessCount” /> time
Робота з базами даних
У API JDBC інтенсивно експлуатується концепція інтерфейсів — набору методів, що повинні бути реалізовані постачальником того чи іншого сервісу, у даному випадку постачальником драйвера JDBC. З програмної точки зору драйвер JDBC є щось інше як реалізація інтерфейсів передбачених API JDBC. По способу реалізації драйвери підрозділяються на 4 типи:
До цього типу відносяться драйвери реалізовані поверх ODBC. Тобто фактично усі виклики API JDBC транслюються у виклики ODBC, а далі обробку виклику веде API ODBC. Іноді ще 1-й тип драйверів називається "JDBC-ODBC bridge". Перевагою драйверів цього типу, є те що всі джерела даних доступні за допомогою ODBC стають доступними Java додатку, недоліки такого драйвера: низька швидкість роботи, труднощі конфігурації і неможливість підтримки всіх можливостей API JDBC.
До другого типу відносяться драйвери програмні частини, якого написані на інших мовах (як правило на С++). Звичайно в цьому випадку для доступу до бази даних використовуються бібліотеки розроблені виробником, а для їхнього виклику використовується JNI — Java інтерфейс виклику внутрішніх функцій. Такі драйвери зазвичай дуже швидкі, але так само як і у випадку JDBC-ODBC драйверів вимагають установки спеціального ПО на клієнтській машині. Для OCI-JDBC драйвера Oracle наприклад потрібна установка клієнта SQL*NET.
На відміну від попередніх типів драйверів даний тип драйвера повністю реалізується на Java, але при цьому виклики JDBC транслюються до мережного протоколу (RMI, HTTP і т.д.), що далі транслюється до специфічного протоколу бази даних. Такий драйвер схожий на драйвери JDBC-ODBC, відмінність у тім, що реалізується цілком на Java, за рахунок чого відсутня необхідність в установці клієнтського ПО.
Також як і драйвери 3-го типу реалізується цілком на Java, але виклики реалізуються використанням протоколу бази даних, минаючи мережний протокол.
Будемо вважати, що ви використовуєте 3 тип драйверів, оскільки ми не знаємо яка у вас операційна система. Для отримання доступу до БД необхідно виконати наступні дії:
Завантаження JDBC-драйвера.
Визначення URL для встановлення з’єднання.
Встановлення з’єднання.
Створення об’єкту Statement.
Виконання запиту або оновлення БД.
Обробка результатів.
Закриття з’єднання.