Почему пристань?
Ну, потому что он намного быстрее, чем обычно используемый нами Websphere AS, и он действительно хорошо поддерживает быструю (или, скажем так, гибкую ) разработку благодаря быстрому изменению. И потому что это просто круто печатать
2 Что можно настроить в Jetty
В этом разделе будет представлена наиболее часто используемая конфигурация Jetty.
2.1 Основные примеры применения
Стандартное приложение Jetty, есть папка demo-base, вы не можете запустить Jetty под $ JETTY_HOME, выполните следующую команду в папке demo-base:
> cd $JETTY_HOME/demo-base/ > java -jar $JETTY_HOME/start.jar
Успешная операция выдаст следующую информацию:
1.2 Введение в проект Jetty
Введение во все лучшие каталоги Jetty:
Таблица 2.1. Содержание
Location | Description |
---|---|
license-eplv10-aslv20.html | Файл лицензии Jetty |
README.txt | Полезная стартовая информация |
VERSION.txt | Информация о версии |
bin/ | Скрипт оболочки хранится в системе Unix |
demo-base/ | Базовый каталог серверов Jetty, на котором можно запускать примеры веб-приложений. |
etc/ | Конфигурационный файл Jetty |
lib/ | Jar-файлы, необходимые для запуска Jetty |
logs/ | журнал |
modules/ | Различные модули |
notice.html | Лицензионная информация и др. |
resources/ | Содержит новые файлы конфигурации, добавленные в classpath, такие как log4j.properties |
start.ini | Хранить информацию о запуске |
start.jar | Jar работает Jetty |
webapps/ | Каталог для хранения веб-приложений Jetty, работающих в конфигурации по умолчанию |
Создание основного класса
Основной класс приложения будет содержать функцию main – так называемую точку входа, с которой начинается работа программы. Функция main включит инициализацию, настройку и запуск встроенного сервера Jetty.
Для создания основного класса приложения кликнем правой кнопкой на наименовании проекта в панели Project Explorer, в контекстном меню выберем New и далее Class. В название класса введём Main. Установим флажок для создания статической функции main и кликнем кнопку Finish.
Так же как и в случае сервлета создаётся и открывается в текстовом редакторе соответствующий файл.
2 Как выбрать версию Jetty
Jetty9 является последней версией Jetty и значительно улучшена по сравнению с предыдущей версией. Одним из улучшений является то, что все функции Jetty были отражены в документации Jetty9. Поэтому для многих пользователей, использующих старую версию Jetty, мы рекомендуем использовать Jetty9, и мы также сказали, что будем активно поддерживать эту версию в течение следующих нескольких лет.
Таблица 1.1 Версия Jetty
3 Веб-спецификации Jetty и Java EE
Спецификация Java EE, реализованная Jetty, в основном является спецификацией сервлета. Последняя платформа Java EE представляет новую веб-спецификацию. Рекомендуется, чтобы разработчикам была нужна только часть большинства технологий. Тем не менее, Jetty не реализует все технологии, указанные в спецификации Web, Jetty спроектирован как контейнер и может свободно расширять нужные функции с помощью плагинов.
3.1 Веб-спецификация Java EE 7
В спецификации Java EE7 были обновлены некоторые важные функции и добавлены некоторые новые:
Таблица 1.2 Веб-профиль JavaEE7
JSR | Имя | Включает ли Jetty-9.1.x | Плагин поддержки |
---|---|---|---|
JSR 340 | Servlet Specification API 3.1 | Yes | |
JSR 344 | Java Server Faces 2.2 (JSF) | No | Yes, Mojarra or MyFaces |
JSR 245 / JSR 341 | Java Server Pages 2.3/Java Expression Language 3.0 (JSP/EL) | Yes | Yes |
JSR 52 | Java Standard Tag Library 1.2 (JSTL) | Yes | Yes |
JSR 45 | Debugging Support for Other Languages 1.0 | Yes (via JSP) | Yes (via JSP) |
JSR 346 | Contexts and Dependency Injection for the JavaEE Platform 1.1 (Web Beans) | No | Yes, Weld |
JSR 330 | Dependency Injection for Java 1.0 | No | Yes as part of a CDI implementation, Weld |
JSR 316 | Managed Beans 1.0 | No | Yes, as part of another technology |
JSR 345 | Enterprise JavaBeans 3.2 Lite | No | |
JSR 338 | Java Persistance 2.1 (JPA) | No | Yes, eg Hibernate |
JSR 250 | Common Annotations for the Java Platform 1.2 | Yes | Partially (for non-core Servlet Spec annotations) |
JSR 907 | Java Transaction API 1.2 (JTA) | Yes | Yes |
JSR 349 | Bean Validation 1.1 | No | Yes as part of another technology eg JSF, or a stand-alone implementation such as Hiberate Validator |
JSR 339 | Java API for RESTful Web Services 2.0 (JAX-RS) | No | |
JSR 356 | Java API for Websocket 1.0 | Yes | No |
JSR 353 | Java API for JSON Processing 1.0 (JSON-P) | No | Yes, eg JSON-P reference implementation |
JSR 318 | Interceptors 1.2 | No | Yes as part of a CDI implementation |
3.2 Jetty EE 6 Web Profile
Ниже описывается веб-профиль JavaEE6 и его связь с Jetty
Таблица 1.3 Веб-профиль Java EE 6
JSR | Name | Included with jetty-9.0.x | Pluggable |
---|---|---|---|
JSR 315 | Servlet Specification API 3.0 | Yes | |
JSR 314 | JavaServer Faces 2.0 (JSF) | No | Yes, for example, Mojarra or MyFaces |
JSR 245 | JavaServer Pages 2.2/Java Expression Language 2.2 (JSP/EL) | Yes | Yes |
JSR 52 | Java Standard Tag Library 1.2 (JSTL) | Yes | Yes |
JSR 45 | Debugging Support for Other Languages 1.0 | Yes (via JSP) | Yes (via JSP) |
JSR 299 | Contexts and Dependency Injection for the Java EE Platform 1.0 (Web Beans) | No | Yes, Weld or OpenWebBeans |
JSR 330 | Dependency Injection for Java 1.0 | No | Yes as part of a CDI implementation, Weld |
JSR 316 | Managed Beans 1.0 | No | Yes, as part of another technology. |
JSR 318 | Enterprise JavaBeans 3.1 | No | Yes, OpenEJB |
JSR 317 | Java Persistance 2.0 (JPA) | No | Yes, Hibernate |
JSR 250 | Common Annotations for the Java Platform | Yes | Partially (for non-core Servlet Spec annotations) |
JSR 907 | Java Transaction API (JTA) | Yes | Implementations are pluggable, such as Atomikos, JOTM, Jencks (Geronimo Transaction Manager) |
JSR 303 | Bean Validation 1.0 | No | Yes as part of another technology (JSF), or a stand-alone implementation such as Hiberate Validator |
4.1 Maven координаты
Jetty находится в центре Maven с самого начала, поэтому координаты Maven также изменились в последние годы. Когда Jetty управляется на основе SourceForge, Maven’s groupId равен org.mortbay.jetty. Когда Jetty 7 приходит к затмению, groupId изменилось.
POM координаты Jetty являются следующими
4.2 Обновление журнала в Maven Center
Журналы обновлений Jetty разных версий записываются в файл с именем VERSIONS.txt, который также можно найти в Центре Maven, координаты которого следующие
2 Запустить причал
Выполните следующий код, Jetty будет работать на порту по умолчанию 8080
cd $JETTY_HOME java -jar start.jar
Если выполнение выполнено успешно, будет выведена следующая информация
2.2 Создать новый базовый каталог Jetty
Каталог demo-base – это базовый каталог jetty.base, недавно добавленный в версию Jetty 9.1. Базовый каталог Jetty позволяет отдельно развертывать конфигурацию и веб-приложения, что упрощает обновление системы. Конфигурация Jetty по умолчанию основана на двух свойствах:
jetty.home: это свойство определяет путь к Jetty, пакет jar, модуль по умолчанию и конфигурацию xml по умолчанию (обычно start.jar, lib и т. д.)
jetty.base: этот атрибут представляет путь к определенному приложению-службе Jetty, включая его журналы, конфигурацию и веб-приложения (обычно start.ini, start.d, logs и webapps)
2.6 Дополнительные параметры работы start.jar
Работа start.jar используется для перевода содержимого командной строки. Каталоги start.ini и start.d (включая файлы * .ini) генерируют среду classpath. Различные атрибуты и конфигурации могут быть настроены с использованием соответствующего XML-файла Jetty. Дополнительные методы использования могут быть использованы с помощью команд.
> java -jar $JETTY_HOME/start.jar --help
3 Развертывание веб-приложений
Jetty поддерживает горячее развертывание и может автоматически развертывать элементы в каталоге веб-приложений. Стандартный файл war и файл конфигурации Jetty находятся в каталоге webapps, а горячее развертывание выполняется по следующим правилам
3.1 Пример веб-приложения Jetty
Проект в файле demo-base / webapps содержит следующее развертывание и дополнительные файлы:
ROOT /: эта папка содержит различные статические ресурсы. Содержит страницу приветствия Jetty, путь доступа по умолчанию – /
test.d: папка, содержащая дополнительные файлы конфигурации, используемая test.xml для добавления дополнительной конфигурации для test.war
test.xml: файл конфигурации контекста, используемый для настройки и развертывания test.war, включая дополнительную информацию о конфигурации в контексте и конфигурацию в test.d
test.war: образец веб-программы, настроенный в test.xml
async-rest.war: пример асинхронного веб-приложения
test-jaas.war: веб-приложение, использующее аутентификацию JAAS.
test-jaas.xml: файл конфигурации, используемый для настройки test-jaas.war
test-jndi.war: пример приложения с использованием JNDI
test-jndi.xml: файл конфигурации, используемый для настройки test-jndi.war
test-spec.war: пример приложения, использующего аннотации, спецификации ServletContainerInitializer и Servlet 3.0 / 3.1
test-spec.xml: файл конфигурации, используемый для настройки test-spec.war
xref-proxy.war: пример приложения, использующего прокси
example-Move.xml: пример приложения, которое демонстрирует использование перенаправления MovedContextHandler
1.1 Конфигурация Jetty POJO
Основным компонентом Jetty является POJO (простые старые объекты Java). Процесс настройки Jetty – это процесс создания и настройки POJO Jetty, который может быть реализован следующим образом:
- Напишите Java-код для непосредственного создания и настройки объекта Jetty, который называется встроенным Jetty.
- Используйте xml-файл конфигурации Jetty, который является режимом фреймворка управления, создайте экземпляр объекта Jetty из xml-файла. Файл конфигурации etc / jetty.xml является основным файлом конфигурации Jetty, но есть также много файлов типа etc / jetty -__ feature __. Xml, используемых Jetty
- Используйте стороннюю платформу IOC, такую как Spring, для создания экземпляра объекта Jetty в виде Spring Beans
Поскольку основным методом настройки Jetty является IoC, этот документ в основном представляет этот метод.
1.2 Файл конфигурации запуска Jetty
Jetty использует следующий файл конфигурации для создания экземпляра и запуска службы, обработанной start.jar
ini files:
Принцип запуска Jetty использует командную строку и использует файлы $ JETTY_BASE / start.ini и $ JETTY_BASE / start.d / *. Ini для создания допустимого параметра команды следующим образом:
- Активный модуль — модуль = имя
- Используйте name = значение для настройки свойств для IOC Jetty
- XML files in Jetty IoC (or Spring) XML format
- Стандартный файл свойств Java содержит дополнительные свойства запуска
- Другие параметры start.jar (см. Java -jar start.jar –help)
- Некоторые комбинации параметров JVM передаются через –exec, например -Xbootclasspath.
Подсказка
В Jetty9 редактируется только файл конфигурации под базовым путем Jetty, свойства будут изменены
mod files:
Файл $ JETTY_HOME / modules / *. Mod содержит определение каждого модуля, который может быть активирован командой –module = name, и каждый файл мода определяет:
- Модуль зависит от того, как сортировать и активировать
- Пакет jar, необходимый модулю и пути к классам
- XML-файл, необходимый модулю, и содержимое будет выполнено
- Файлы, необходимые для активированного модуля
- Пример ini-файла, используемый при активации опции -add-to-start = name
Note
Общая информация о конфигурации модуля редко изменяется. * .Mod файлы обычно находятся в папке $ JETTY_HOME / modules /, но дополнительные или отредактированные файлы обычно помещаются в $ JETTY_BASE / module. Если модуль должен быть Изменить, лучший способ – скопировать * .mod из $ JETTY_HOME / modules / в $ JETTY_BASE / modules / перед изменением
XML files:
XML-файл обычно используется с IoC и пружиной, используемыми в командной строке или определении модуля. Конфигурация в xml-файле будет внедрена в объект, описывающий сервис. Обычный способ изменить атрибуты – изменить соответствующий INI-файл. XML-файл обычно помещается в $ JETTY_HOME / etc /, но новый или отредактированный xml должен быть помещен в $ JETTY_BASE / etc /.
На следующем рисунке показана взаимосвязь между различными файлами конфигурации (ini, mod и XML).
1.3 Другие файлы конфигурации
В дополнение к файлам конфигурации, описанным выше, информация о конфигурации службы может использовать следующие файлы:
Context XML files:
1.4 Использование Jetty IoC XML
Чтобы понять использование Jetty IOC XML, как показано в следующем примере Java, экземпляр и конфигурация встроенного сервера Jetty
2.1 Сервис конфигурации
Экземпляр сервера является важной частью службы Jetty, он предоставляет службы и управление жизненным циклом для других компонентов Jetty. В стандартных приложениях Jetty информация о конфигурации ядра находится в файле etc / jetty.xml, но вы также можете добавить другие конфигурации в файл конфигурации, в том числе:
ThreadPool:
Экземпляр сервера предоставляет экземпляр ThreadPool по умолчанию для вызова других компонентов. Основными параметрами для настройки пула потоков являются максимальное и минимальное количество параметров, заданных в файле start.ini или файле start.d / server.ini.
Handlers:
2.3 Настройка контекста
Среда Jetty содержит набор процессоров для обработки запросов по указанным путям. Среда Jetty может содержать стандартные процессоры и пользовательские процессоры.
Note
Спецификация сервлета определяет веб-приложение. В спецификации Jetty стандартный веб-проект должен иметь стандартный файл WEB-INF / web.xml, который используется для настройки пути к классам, ресурсов, обработки сеанса, входа в систему и сервлета, jsp и статических ресурсов. Стандартные веб-приложения требуют несколько дополнительных файлов конфигурации.
Конфигурация общего контекста:
contextPath:
ContextPath – это префикс URL-адреса. Например, contextPath – это / foo, он будет обрабатывать такие запросы, как / foo, /foo/index.html, / foo / bar / и /foo/bar/image.png, но он не будет обрабатывать такие запросы, как /, / other /, или /favicon.ico запрашивает, если contextPath равен /, это корневой contextPath.
virtualHost:
Настройте ip или имя хоста мониторинга, никакая конфигурация не будет отслеживаться.
classPath:
Настройте classpath. Стандартными classpath являются WEB-INF / lib и WEB-INF / classes. Вы также можете добавить дополнительные пути к classpath.
attributes:
Свойства конфигурации могут быть переданы в класс сущности, такой как свойство javax.servlet.context.tempdir, используемое для настройки временного каталога.
resourceBase:
Конфигурировать ресурсы. Эта конфигурация представляет собой каталог, содержащий различную статическую информацию о ресурсах, которая может представлять собой изображения или HTML-страницы.
3.2.3.1 Настройка контекста через API
Во встроенном сервере пользователи могут настраивать контекст с помощью API ContextHandler, например:
2.4 Настройка веб-приложений
Спецификация сервлета определяет веб-приложение. Когда вызов упакован в файл WAR (архив веб-приложения), Jetty настраивается следующим образом:
- Инициализируйте путь к классам в WEB-INF / lib и WEB-INF / classes.
- Согласно стандарту WEB-INF / web.xml для анализа параметров инициализации, фильтров, прослушивателей, страницы приветствия и другой информации.
- Файл WEB-INF / jetty-web.xml может содержать конфигурацию Jetty IoC.
3.2.4.1 Настройка contextpath
Можно добавить файл WEB-INF / jetty-web.xml для настройки пути к классам.
Jetty authentication architecture
This question is hard to answer as its very open ended / vague.
I’ll try the simple answer first.
First, the basics, what’s provided by the JVM:
Now the Jetty specifics:
Finally, how it ties together:
Во-вторых, использование jetty
Вы можете внедрить Jetty в программу, используемую разными способами, использовать ее в разных системах или использовать в качестве независимого сервера.В этом разделе представлен последний, который предназначен для развертывания сети как отдельного сервера. применение.
Добавление импортируемых модулей
Код, который будет добавлен в файл сервлета потребует добавления следующих ниже строк кода включения модулей. Добавим эти строки.
Добавление кода в метод doget
Метод doGet содержит код обработки GET–запросов. В этом методе последовательно добавим приведённые ниже фрагменты кода.
Приём параметров в соответствующие строковые переменные.
String str_a = request.getParameter("a");
String str_b = request.getParameter("b");
String str_op = request.getParameter("op");
Объявление переменных для принятия декодированных из строковых переменных числовых параметров a и b.
double value_a = 0;
double value_b = 0;
Объявление переменной контроля возникновения ошибки noError.
boolean noError = true;
Попытка декодирования числовых параметров a и b из соответствующих строковых переменных. При ошибке декодирования переменная noError принимает значение “ложь”.
try {
value_a = Double.parseDouble(str_a);
value_b = Double.parseDouble(str_b);
}
catch ( Exception ex ) {
noError = false;
}
Открытие секции кода для случая, если при декодировании числовых параметров ошибка не возникла.
if ( noError ) {
Объявление числовой переменной result для хранения результата.
double result = 0;
Открытие секции try для включения кода вычисления и контроля ошибок. Секция необходима, так как при арифметических операциях может возникнуть ошибка операции с плавающей запятой.
try {
Для случая операции сложения, вызываем функцию functionSum, которую опишем позднее.
if (str_op.equals(" ")) result = functionSum( value_a, value_b );
else
Для случая операции вычитания, вызываем функцию functionDif, которую опишем позднее.
if (str_op.equals("-")) result = functionDif( value_a, value_b );
else
Для случая операции умножения, вызываем функцию functionMul, которую опишем позднее.
if (str_op.equals("*")) result = functionMul( value_a, value_b );
else
Для случая операции деления, вызываем функцию functionDiv, которую опишем позднее. Так как для типа double ошибка деления на ноль на современных платформах не возникает, ситуацию в которой делитель равен нулю мы контролируем вручную.
if (str_op.equals("/") && (value_b!=0)) result = functionDiv( value_a, value_b );
else
После проверки всех четырёх операций устанавливаем флажок отсутствия ошибки в “ложь”. Это делается для идентификации того, что арифметическая операция не идентифицирована.
noError = false;
Закрываем блок try с установлением флажка отсутствия ошибки в “ложь” в случае возникновения исключительной ситуации.
}
catch ( Exception ex ) {
noError = false;
}
В случае если ошибки не возникло, отсылаем результат методом doSetResult, который опишем ниже. Так как работа метода doGet на этом завершается, возвращаемся оператором return.
if ( noError ) {
doSetResult( response, result );
return;
}
Закрываем секцию, начатую оператором “if ( noError ) {“:
}
Так как при обработке запроса где-то произошла ошибка и функция doGet не возвратила управление с успешным вычислением, возвращаем сообщение об ошибке методом doSetError, который опишем ниже.
doSetError( response );
Добавление кода в метод main
Код метода main начинается с объявления переменной port и присваивания ей номера порта, который будет слушать сервер. Такой подход позволит быстро и легко изменить порт в случае необходимости в случае дальнейшего роста программы.
int port = 8080;
Создаем класс сервера.
Server server = new Server(port);
Указываем параметры, которые свяжут путь строки запроса с созданным выше сервлетом.
Добавление ссылки на библиотеку jetty
Сразу после создания проект не содержит ссылку на библиотеку jetty. Подключённые библиотеки можно просмотреть в
Project Explorer
во вкладке
Java Resources
, в под-вкладке
Libraries
Кликнем правой кнопкой мыши на метку проекта и в контекстном меню выберем Build Path и далее Configure Build Path…. Во вкладке Java Build Path на страничке Libraries кликнем кнопку Add Library….
Задача
Рассмотрим создание калькулятора как веб-службу, реализующую простые арифметические действия с двумя числами. Веб-службу можно рассматривать так же как и удалённую функцию, принимающую входные параметры и выдающую результат. Поэтому её функциональность можно описать следующим образом:
Входные параметры:
Выходные параметры:
Запуск сервера
При запуске сервера Eclipse может предложить два варианта. Так как сервер содержит полноценный сервлет, то программа может быть запущена на сервере приложений, таком как к примеру Tomcat или самостоятельный Jetty. Однако так как мы встроили jetty в приложение, оно может работать самостоятельно – как Java Application.
После запуска приложение выдаёт соответствующие уведомления и строку Listening port: port, указывающую что наш сервер запущен и ждёт запросов.
Клиент – веб страница
Специализированная веб страница – простой тип клиентского приложения.
HTML код страницы можно найти в репозитории GitHub.
Клиенты сервера
Использование браузера и прямая посылка запросов непрактичны, так как при ручном формировании строки запроса очень вероятно допущение ошибки. Использование подобного ресурса может быть организовано посредством:
Междоменные запросы
Междоменные запросы ( также такие запросы называются кроссдоменными / cross domain ) имеют место при запросах с веб страниц, расположенных вне сетевого домена обслуживающего сервера. Ответы на подобные запросы обычно блокируются для противостояния меж-доменным атакам. Для отключения блокировки в ответах сервера можно установить заголовок Access-Control-Allow-Origin:*.
Методы реализации арифметических операций
Архитектура рассматриваемого простого примера подразумевает разделение кода на функциональные части. Ввиду этого арифметические операции реализованы в виде отдельных функций, а не включены в тело метода doGet. Так как функции простые, их код комментировать не будем.
protected double functionSum( double a, double b ) {
return a b;
}
protected double functionDif( double a, double b ) {
return a - b;
}
protected double functionMul( double a, double b ) {
return a * b;
}
protected double functionDiv( double a, double b ) {
return a / b;
}
Исходный код программы можно найти в
Настройка проекта
Общая конфигурация
Вам нужно добавить плагин Jetty в ваш pom.xml :
Определение источника данных
Предположим, что приложение использует источник данных, настроенный на сервере, и получает к нему обычный доступ через JNDI. Затем мы должны определить ссылку на источник данных в src / main / webapp / WEB-INF / web.xml :
Подсказка
В Jetty9 редактируется только файл конфигурации под базовым путем Jetty, свойства будут изменены
Посылка запросов посредством браузера
Наиболее простой способ проверить функциональность сервера – обратиться к нему посредством браузера.
Предупреждение
Пример веб-приложения не обязательно является абсолютно безопасным, поэтому его не следует развертывать в производственной среде.
Пример запроса/ответа – ошибка «деление на 0»
Запрос:
Пример запроса/ответа – ошибка «неверный формат числа»
Запрос:
Пример запроса/ответа — произведение
Запрос:
Пример запроса/ответа — разность
Запрос:
Пример запроса/ответа — сумма
Запрос:
Пример запроса/ответа — частное
Запрос:
Создание запускаемого модуля
Созданный сервер можно оформить как единый независимый запускаемый JAR-файл. Такой файл будет требовать только наличия установленной среды выполнения Java и запускаться из любой папки файловой системы. Для создания такого файла кликнем правой кнопкой мыши на наименовании проекта в панели
Project Explorer
, в контекстном меню выберем
Export
и далее
Export…
. В секции
Java
выберем
Runnable JAR file
и кликнем кнопку
Next
В настройках создаваемого JAR-файла указываем Launch configuration как Main-SCalculator, полное имя экспортируемого файла и флажок упаковки необходимых модулей в этот файл.
Запуск правильно созданного JAR-файла с именем SCalculator осуществляется простой командой (при запуске из той же папки, где он находится):
java -jar SCalculator.jar
Также возможен запуск сервера двойным кликом мыши на JAR-файле.
Создание проекта веб сервера
В меню
File/New
выберем
Dynamic Web Project
. В поле
Project
name введём SCalculator. Нажмём кнопку
Finish
Создание файла сервлета
Сервлет калькулятора будет содержать весь код декодирования входных данных, вычисления, и формирования ответа. Для создания сервлета кликнем правой кнопкой мыши на наименование проекта в панели
Project Explorer
, в контекстном меню выберем
New
и далее
Servlet
. В название класса введём SrvltCalculator и кликнем кнопку
Finish
В панели Project Explorer можно увидеть созданный файл SrvltCalculator.java. Его содержимое автоматически открывается в редакторе.
Ссылки
Подробнее о встраивании Jetty в приложение можно почитать по ссылке
Удаление лишнего кода
Для упрощения дальнейшего редактирования файлов удалим неиспользуемые конструктор сервлета SrvltCalculator и метод doPost.
Установка библиотек jetty
Jetty очень удобен для создания веб приложений. Использование его как встроенного сервера освобождает разработчика от развёртывания веб приложения на внешний сервер при каждом запуске. Также это не требует установку внешнего сервера приложений.
Для большинства случаев достаточно загрузить библиотеки сервера, зарегистрировать их в Eclipse как библиотеку пользователя и далее использовать ссылку на эту библиотеку. Этот подход прост для начинающих Java программистов так как не требует наличия и навыков инструментария автоматизации сборки, такого как Maven или Gradle.
Установить необходимые библиотеки Jetty в Eclipse можно следующим образом:
Итоги
Многие описанные в этом выпуске элементы были практически использованы при создании высоконагруженных серверов. Несомненно были использованы и более продвинутые приёмы, позволившие достигнуть высокого быстродействия и надёжности, такие как использование сервера NGINX в режиме обратного прокси.