Вивчаємо jsp і servlets

Вивчаємо jsp і servlets

У цій статті в стислій формі представлені основи будови сервлетів. Як правило, такого роду матеріалу достатньо для того, щоб отримати уявлення про технології Java Servlets.







завдання сервлетів

  • Читання явних даних, відправлених клієнтським додатком (дані форм, полів)
  • Читання неявних даних, відправлених клієнтським додатком (наприклад, заголовки запитів)
  • Побудова результату обробки отриманих даних.
  • Відправка явних даних назад в клієнт (наприклад, HTML дані, які будуть відображені на сторінці).
  • Відправка неявних даних назад в клієнт (коди статусів, заголовки відповіді).

Таким чином, клієнт звертається до сервлету за допомогою HTTP-запитів, що містять як дані форм, так і необхідні заголовки. Сервлет ж генерує відповідь, що містить дані з різних джерел, використовуючи для цього різні технології. Сам відповідь сервера являє собою все той же HTTP запит.

Вивчаємо jsp і servlets

найпростіші сервлети

Розглянемо сервлети і їх особливості на прикладах.

Сервлет, що генерує простий текст

Розглянемо наступний приклад:

Вивчаємо jsp і servlets

Розберемо даний вище код.

  • @Webservlet ( "/ address") - анотація, яка містить відносний шлях до сервлету, докладніше написано нижче.
  • doGet - метод, який відповідає за обробку GET запитів. Для POST запитів використовується метод doPost
  • HttpServletRequest - містить все те, що було отримано від клієнта
  • HttpServletResponse - використовується для відправки даних до клієнта. Головним чином використовується метод getWriter, щоб отримати PrintWriter, що направляє дані клієнта.






Вивчаємо jsp і servlets

У нашому тестовому сервері хост - це просто localhost, ім'я проекту ви бачите в списку проектів, а шлях з анотації - це відносний шлях, вказаний в анотації @Webservlet.

Сервлет, що генерує HTML код сторінки

Результат роботи попереднього сервлету є всього лише текст, який не містить HTML тегів. Для того, щоб повністю сформувати сторінку, використовуючи HTML, нам необхідно включити необхідні теги в тіло відповіді, а також задати заголовок відповіді як "text / html".

Копіюємо попередній клас і додаємо зміни:

Результат роботи сервлета:

Вивчаємо jsp і servlets

Використання допоміжних класів

Розміщення всієї логіки в сервлет виправдано лише для дуже простих проектів, а для більш-менш серйозних слід використовувати допоміжні класи, керуючись такими принципами.

  • Весь Java код знаходиться одному місці. У Eclipe це src /<имя пакета>.
  • Пам'ятайте про принципи ООП. Якщо який-небудь функціонал використовується багато разів, винесіть його в допоміжний клас.

простий приклад

Нижче наведено приклад використання допоміжного класу для генерації заголовка сторінки з попереднього прикладу. Природно, генерація чистого HTML всередині реальних додатків - справа невдячна, краще використовувати JSP. Але ми прагнемо побачити принципи побудови сервлетів і поки скористаємося найпростішим варіантом. Передбачається, що генерація заголовка сторінки - це часто використовуваний функціонал, який зустрічається у всіх сервлетах нашого проекту, що генерують HTML. Тому буде вкрай корисним винести цю логіку за межі сервлетів у допоміжний клас:

Використання цього класу в сервлет виглядає так:

У браузері ми бачимо зібрану сторінку:

Вивчаємо jsp і servlets

Життєвий цикл сервлета

Кожен сервлет реалізує певний набір методів, що визначають його життєвий цикл:

  • init - цей метод викликається при першому завантаженні сервлета. Тобто не при кожному запиті.
  • service - викликається в новому потоці для кожного запиту. Управляє методами doGet, doPost і ін. Не перевизначайте цей метод!
  • doGet, doPost, do. - викликаються при, відповідно, GET, POST і інших запитах. Перевизначайте ці методи, щоб обробляти запити необхідного типу.
  • destroy - викликається коли сервер видаляє об'єкт сервлету. Чи не викликається після кожного запиту.

Чому не варто перевизначати service

Цей метод не просто викликає doGet, він автоматично обробляє HEAD, OPTIONS, TRACE запити. Різні запити ви можете обробляти, використовуючи відповідні методи (doPut, doTrace і тп.).

Вихідні тексти проекту Eclipse можна скачати по посиланню нижче







Схожі статті