Керівництво Java Servlet для початківців

Керівництво Java Servlet для початківців

Java Servlet - це програма на боці сервера, написана однойменною мовою програмування, яка отримує сигнали клієнта і відправляє йому відповіді назад. Це ключовий елемент, що формує типове Java EE, крім JSP, EJB, XML та інших пов 'язаних технологій. Програма може бути упакована у файл WAR (Web AR chive) для розгортання на веб-сервері. Сервер, який може запускати Java-сервлет, називається контейнером. Програма, яка запускається на такому сервері може створювати динамічні веб-сторінки.

Java Servlet: основи

Найбільш популярними і широко використовуваними контейнерами є Tomcat і JBoss. Технічно сервлет - це нормальний Java-клас, який має розширення для загального клієнт-серверного протоколу або HTTP. На практиці він застосовується для обробки запитів, через перевизначення HttpServlet GET і POST відповідно. Контейнер Java Servlet надає Http.ServletRequest і Http.ServletResponse - об 'єкти, що працюють за схемою запит-відповідь. І зазвичай використовується в поєднанні з JSP для генерації динамічного контенту.


Типовий сценарій моделі:

  1. JSP представляє форму для введення даних.
  2. Сервлет отримує вхідні дані, обробляє їх і відправляє відповідь.
  3. Для якісної роботи він використовує спеціальні фільтри.

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

Спільні завдання, які виконують з фільтрами:

  1. Реєстрування параметрів запиту для реєстрації файлів.
  2. Автентифікація і автентифікація запиту ресурсів.
  3. Форматування тіла запиту або заголовка перед відправленням його на сервлет.
  4. Стиснення даних відповіді, надісланих клієнтові.
  5. Зміна відповіді, додавання деяких файлів куки.
  6. Інформація заголовка Java Servlet.

Фільтри з 'єднуються та налаштовуються у файлі розгортання (web.xml). Сервети і фільтри не знають один про одного, тому можна додати або видалити фільтр, просто відредагувавши web.xml. Можна мати кілька фільтрів для одного ресурсу або створити ланцюжок фільтрів для web.xml або запустити Java Servlet filters, реалізуючи javax.servlet.Filter інтерфейс.

Основні функції Servlet

Паралельні запити на сервер обробляються потоками, що забезпечує важливі якості веб - багатопоточність і паралелізм.

Основні функції:


  1. Портативність. Оскільки Java незалежна від платформи, те ж саме правильно і для серверів. Наприклад, можна створити його в операційній системі Windows, щоб розробники GlassFish використовували його як веб-сервер, а потім могли запустити його в будь-який інший ОС, такий як Unix, Linux з веб-сервером apache Java Servlet. Ця функція робить його переносимим, і це головна його перевага над CGI.
  2. Ефективність і масштабованість. Як тільки Servlet розгортається і завантажується на веб-сервер, він може миттєво почати виконання запитів клієнтів. Він викликається легким потоком, тому кілька клієнтських запитів можуть заповнюватися одночасно, використовуючи функцію багатопоточності Java. На відміну від CGI, де сервер ініціює новий процес для кожного запиту клієнта.
  3. Надійність. Наслідуючи верхні функції Java такі, як збір сміття, обробка винятків, диспетчер безпеки Java та інші, він менш схильний до проблем з управлінням і витоків пам 'яті. Це робить розробку програми в ньому безпечною і безпомилковою.

Необхідність застосування динамічних веб-сторінок

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

Багато користувачів мають досвід використання технології Джава для створення веб-сервісів на базі CGI, але Java Servlets більш ефективні, потужніші, простіші у використанні і дешевші традиційних альтернатив CGI.

Переваги Java Servlets:

  1. Ефективність. У традиційному CGI кожен HTTP-запит запускає новий процес CGI. Навіть якщо його код відмінно реалізований, часто виникає значний обсяг накладних витрат не тільки при запуску процесу, але і під час його виконання. Коли використовуються сервери, JVM залишається завантаженим у пам 'яті, і кожен запит обробляється потоком Java. Як приклад Java Servlet, якщо в традиційній моделі CGI є кількість X одночасних запитів, це означає, що код для програми завантажується в пам 'ять X разів. Це стає надмірним навантаженням на веб-сервер. Однак у середовищі сервлета є потоки X, де запускається тільки одна копія його класу. Результатом цього є підвищення ефективності та масштабованості на декількох платформах.
  2. Зручність. При користуванні програмою, немає сенсу вивчати нову мову, наприклад, Perl, тільки для виконання функцій CGI. Крім того, сервети мають велику інфраструктуру для багатьох завдань, пов 'язаних з HTML, що значно прискорює процес розробки.
  3. Потужність - на жаль, традиційні скрипти CGI залишають бажати кращого. Наприклад, звичайні програми не можуть безпосередньо розмовляти з веб-серверами, що означає, що необхідно створити весь інтерфейс. Сервети можуть безпосередньо взаємодіяти з веб-серверами, спрощуючи операції, що потребують прямого доступу до сховищ даних. Вони також унікальні, тому що можуть обмінюватися даними з іншими сервлетами і підтримувати інформацію між запитами, що робить сеансове відстеження надзвичайно простим.
  4. Переносимість Джава поширюється безпосередньо на сервети. Фактично майже кожен головний веб-сервер, який зараз використовується, підтримує Java Servlets безпосередньо або через модуль.
  5. Економність. З точки зору розробки, впровадження серветів набагато дешевше, ніж інші варіанти, які вимагають, щоб кодування користувача правильно взаємодіяло з веб-серверами. Java Servlet redirect готовий до роботи і може максимально знизити вартість бізнесу, не жертвуючи перевагами динамічного контенту.

Створення структури каталогів

Щоб розпочати роботу, створюють наступну структуру каталогів.

Де в теці:

  • Deploy - розміщують створений файл.
  • Src - розміщують вихідні файли Java в пакеті net.codejava.servlet.
  • WebContent - зберігають сторінки JSP та інші веб-ресурси.
  • WebContent\WEB-INF - встановлено дескриптор web.xml.
  • WebContent\WEB-INF\- скомпільовані класи.

Далі створюють вихідний файл Java під назвою QuickServlet.java в каталозі src\net\codejava\servlet з наступним кодом.

Цей сервлет викликає декілька методів з HttpServlet:


  • init () - буде викликати метод, коли він отримує доступ першим клієнтом. Зазвичай тут вводиться код ініціалізації.
  • doGet () - спрацьовує кожного разу, при HTTP-запиті GET.

Сервлет вводить два елементи:

  1. HttpServletRequest - об 'єкт обгортає всі заголовки HTTP-запитів, щоб отримати контроль над параметрами GET/POST, а також іншими HTTP-заголовками, відправленими від клієнтів через методи getParameter () і getHeader () відповідно.
  2. HttpServletResponse - використовується для відповідей на HTTP-запит, виконує налаштування заголовків відповіді і відправляє вміст HTML назад користувачеві. У методі doGet () відправляють простий HTML-код, який передає повідомлення, наприклад, "Привіт, я сервлет Java!".

Метод для реалізації запитів клієнта:

  1. DoPost () - викликається тоді, коли користувач запитує HTTP POST.
  2. DoGet () - розуміє Http.ServletRequest і Http.ServletResponse, як аргументи. У цьому випадку вираховують значення двох параметрів ширини та висоти прямокутника з запиту для обчислення області та надсилання результату назад клієнту.
  3. Destroy () - контейнер буде викликати його, коли йому потрібно видалення Java, ee Servlet зупиняється.

Написання сторінки JSP

Створюють файл під назвою index.jsp під каталогом WebContent з наступним вмістом:

На цій сторінці JSP:

  1. Розміщують гіперпосилання з атрибутом href = Quick.Servlet, який вказує на відносний шлях сервлета і зіставлення URL для нього.
  2. Натиснувши на це посилання, отримують HTTP-запит GET на сервер, і буде викликаний метод doGet ().
  3. Щоб продемонструвати надсилання HTTP-запиту, створюють просту форму з двома текстовими полями: шириною і висотою.
  4. Атрибут форми встановлюється на відносний шлях.
  5. Кнопка "Надіслати" називається "Розрахувати".

Сторінка JSP виглядатиме так.


Оголошення і налаштування Java web Servlet

Щоб сервлет міг обслуговувати запити користувачів, необхідно оголосити і налаштувати зіставлення його у файлі дескриптора веб. Створюють XML-файл із розширенням web.xml нижче каталогу WebContent\WEB-INF з наступним кодом XML.

Очевидно, що сервлет оголошується за допомогою елемента і його дочірніх елементів, що вказують описове ім 'я для нього і задають повне ім' я класу. Він налаштований на обслуговування запитів з використанням елемента і його дочірніх частин, що вказують ім 'я, оголошеного за допомогою елемента і шаблон URL, який повинен бути зіставлений з серветом. Шаблон може бути точним збігом каталогу.

Виконання компіляції

Перед виконанням компіляції переконуються, що вказано змінне середовище PATH, що включає каталог JDK_HOME\bin, щоб можна було отримати доступ у рядку команд і мати доступний файл, який, зазвичай, надається контейнером сервлету.

При використанні Томкат файл поміщається в TOMCAT_HOME\lib і називається. Відкривають програму командного рядка операційної системи і змінюють робочий каталог на QuickServlet, як вказано в структурі. Вводять наступну команду: javac -cp TOMCAT_HOME \ lib \ servlet-api.jar ""-d CLASS_DIR SRC_DIR \ QuickServlet.java.

Замінюють імена TOMCAT.HOME, CLASS_DIR і SRC_DIR на значення: TOMCAT_HOME. Це каталог встановлення на комп "ютері у програмній теці. Якщо шлях містить пробіли, розміщують його наступним чином: CLASS_DIR =WebContent \ WEB-INF \ classes SRC_DIR =src \ net \ codejava \ servlet.


Ця команда скомпілює файл QuickServlet.java і розмістить згенерований .class у WebContent\WEB-INF\classes.

Упаковка веб-програми

Стандартний спосіб розгортання програми Java EE полягає в його упаковці з розширенням WAR. У командному рядку вводять команду, обов 'язково в кінці вказується точка:

  • jarcfvdeploy\QuickServletApp.war -C WebContent.

Програма jar помістить все в каталог в один архів zip-формату під назвою Quick.ServletApp.war під каталогом. Тепер розгортають файл Quick.ServletApp.war на сервері, копіюють його в каталог Tomcat. Запускають програму, виконавши Tomcat 7.exe в каталозі. Після входу в консоль видно, що файл Quick.ServletApp.war розгорнуто і сервер прослуховує номер порту 8080.

Тестування QuickServletApp

Тепер відкривають веб-браузер і вводять наступний текст в адресний рядок: HTTP: //локальний: 8080 / QuickServletApp. Оскільки не вказується конкретна сторінка, то за замовчуванням index.jsp завантажується самостійно.

Щоб перевірити сервлет із запитом HTTP GET, натискають на гіперпосилання "Натисніть тут, щоб надіслати запит GET". Щоб перевірити його з запитом HTTP POST, натискають кнопку повернення переглядача і вводять два числа в ширину і висоту текстових полів. Натискають кнопку "Обчислити", і вона поверне обчислену область до результату.


Приклади Tomcat

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

Servlet інтерфейс - центральна абстракція API Java. HttpServlet - найбільш поширений сервлет, який обробляє HTTP-запити, є підкласом, GenericServlet, що реалізує Servlet інтерфейс. Servlet Інтерфейс самостійно оголошує ці abstract методи.

Життєвий цикл сервлета: voidinit (налаштування Servlet.Config) voiddestroy () voidservice (запит Java Servlet request, відповідь Servlet.Response)

Налаштування сервера і інформація: Servlet.Config getServlet.Config () Строка getServlet.Info ().

Функції сервера Java

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

  1. Як правило, сервети працюють швидше, ніж JSP, проте JSP може бути скомпільований в сервети Java.
  2. Веб-розробник Java, повинен бути знайомий з обома технологіями і як вони можуть доповнювати один одного в одній реалізації.
  3. Багато функцій JSP можуть бути досягнуті на боці клієнта з використанням JavaScript. Це знижує навантаження на веб-сервер у періоди максимального використання і часто є методом, що використовується для великих підприємств з постійно високим трафіком.

Хоча автономні Java-програми, досягли піку популярності кілька років тому, але динамічний веб-контент, побудований на технології Java, як і раніше користується великим попитом у компаній у всьому світі.

Якщо користувач в даний час не використовує Java Servlets для створення динамічного контенту, він упускає цікаве поле з необмеженими можливостями для кар 'єрного зростання.