- •Основні відомості про сервлети і 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-сторінок
- •Використання аплетів у якості клієнтських інтерфейсів сервлетів
Основні відомості про сервлети і JavaServer Pages
Сервлети – це програми, які виконуються на WEB-сервері, і діють у якості посередника між запитом, який поступає від Web-браузера або іншого клієнта HTTP, і базами даних або додатками на сервері. Вони можуть виконувати наступні дії: зчитувати дані, передані користувачем; проглядати всю інформацію про запит, яка вбудована в HTTP-запит; генерувати результати; встановлювати відповідні параметри HTTP-відповіді; повертати документ клієнту.
При виконанні багатьох запитів клієнтам можуть повертатися попередньо створені (статичні) документи. Такі запити слід обробляти без використання сервлетів. Однак у багатьох випадках статичний результат не є достатнім, а сторінку слід генерувати при кожному запиті. Наприклад:
сторінки, основані на даних, представлених користувачем;
сторінки будуються на основі часто змінюваних даних;
сторінки використовують інформацію корпоративних баз даних або інших джерел на боці сервера.
Технологія JavaServer Pages (JSP) дозволяє змішувати звичайний, статичний HTML із динамічно генерованим вмістом сервлетів. Частина JSP-сторінки складається зі звичайного HTML-коду, яка передається клієнту без змін. Частини, які генеруються динамічно, відмічені спеціальними HTML-подібними тегами.
Базова структура сервлетів
У наведеному нижче коді наводиться базовий сервлет, який обробляє GET-запити.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>\n"+
"<HEAD><TITLE>Super Test Page</TITLE></HEAD>\n"+
"<BODY>\n"+
"<P align=center>Hello, World!</P>\n")+
"</BODY></HTML>");
}
}
Для того, щоб бути сервлетом, клас повинен успадковувати від класу HttpServlet і перевизначити метод doGet() або doPost(). Обидва методи мають два аргументи: об’єкти класів HttpServletRequest і HttpServletResponse. Клас HttpServletRequest володіє методами, які дозволяють отримати відомості про вхідну інформацію: про дані форми, заголовки HTTP-запиту, ім’я хоста клієнта. Клас HttpServletResponse дозволяє задати вихідну інформацію: коди станів HTTP, заголовки відповіді і, що найважливіше, дозволяє отримати об’єкт класу PrintWriter, який використовується для передачі вмісту документа клієнтові.
Життєвий цикл сервлета
Коли сервлет створюється вперше, активізується його метод init(). У нього включається код початкового встановлення, який виконується один раз. Після цього в результаті виконання кожного запиту користувача створюється окремий потік, який викликає метод service()раніше створеного екземпляра. Потім метод service() викликає метод doGet(), doPost() або інший, в залежності від типу отриманого HTTP-запиту. Коли сервер вирішує вивантажити сервлет, він викликає метод destroy()цього сервлета.
Метод init
Метод init()використовується для однократної ініціалізації сервлета при його створенні і не викликається повторно для кожного запиту користувача.
Існує дві версії метода init().Перша не має параметрів і використовується. Коли сервлету не потрібно зчитувати які-небудь параметри, що залежать від типу сервера:
public void init() throws ServletException {
// код ініціалізації
}
Друга версія у якості параметра отримує об’єкт класу ServletConfig. Ця версія використовується, якщо сервлет повинен зчитати параметри, що визначаються типом сервера. Наприклад, сервлету може знадобитися інформація про параметри бази даних, файли паролів, параметри продуктивності сервера і т.д.:
public void init(ServletConfig config) throws ServletException {
super.init(config);
// код ініціалізації
}
У класі ServletConfig є метод getInitParameter(), який дозволяє проглянути параметри ініціалізації, що відносяться до сервлету. Наприклад:
public void init(ServletConfig config) throws ServletException {
super.init(config);
name=config.getInitParameter("name");
surname=config.getInitParameter("surname");
}
Приклад задавання параметрів ініціалізації для сервера Tomcat (наведено файл web.xml, що розташовується в каталозі install_dir\webapps\SomeName\WEB_INF):
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>
MyServlet
</servlet-name>
<servlet-class>
DimaServlets.HiDima
</servlet-class>
<init-param>
<param-name>
name
</param-name>
<param-value>
Vasya
</param-value>
</init-param>
<init-param>
<param-name>
surname
</param-name>
<param-value>
Pupkin
</param-value>
</init-param>
</servlet>
</web-app>