Перейти к основному содержимому

Создание и настройка сервера Jetty 9 на Java

· 3 мин. чтения

1. Обзор

В этой статье мы поговорим о программном создании и настройке экземпляра Jetty.

Jetty — это HTTP-сервер и контейнер сервлетов, разработанный как легкий и легко встраиваемый. Мы рассмотрим, как установить и настроить один или несколько экземпляров сервера.

2. Зависимости Maven

Для начала мы хотим добавить Jetty 9 со следующими зависимостями Maven в наш pom.xml :

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.8.v20171121</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>9.4.8.v20171121</version>
</dependency>

3. Создание базового сервера

Развернуть встроенный сервер с помощью Jetty так же просто, как написать:

Server server = new Server();
server.start();

Отключить его так же просто:

server.stop();

4. Обработчики

Теперь, когда наш сервер запущен и работает, нам нужно указать ему, что делать с входящими запросами. Это можно сделать с помощью интерфейса Handler .

Мы могли бы создать его сами, но Jetty уже предоставляет набор реализаций для наиболее распространенных вариантов использования. Давайте посмотрим на два из них.

4.1. Контекст веб-приложения

Класс WebAppContext позволяет делегировать обработку запросов существующему веб-приложению. Приложение может быть предоставлено либо в виде пути к файлу WAR, либо в виде пути к папке веб-приложения.

Если мы хотим представить приложение в контексте «myApp», мы должны написать:

Handler webAppHandler = new WebAppContext(webAppPath, "/myApp");
server.setHandler(webAppHandler);

4.2. HandlerCollection

Для сложных приложений мы можем даже указать более одного обработчика, используя класс HandlerCollection .

Предположим, мы реализовали два пользовательских обработчика. Первый выполняет только операции регистрации, а второй создает и отправляет фактический ответ пользователю. Мы хотим обрабатывать каждый входящий запрос обоими в этом порядке.

Вот как это сделать:

Handler handlers = new HandlerCollection();
handlers.addHandler(loggingRequestHandler);
handlers.addHandler(customRequestHandler);
server.setHandler(handlers);

5. Соединители

Следующее, что мы хотим сделать, это настроить, какие адреса и порты сервер будет прослушивать, и добавить тайм-аут простоя.

Класс Server объявляет два удобных конструктора, которые можно использовать для привязки к определенному порту или адресу.

Хотя это может быть нормально при работе с небольшими приложениями, этого будет недостаточно, если мы хотим открыть несколько соединений на разных сокетах.

В этой ситуации Jetty предоставляет интерфейс Connector и, в частности, класс ServerConnector , который позволяет определять различные параметры конфигурации подключения:

ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
connector.setHost("169.20.45.12");
connector.setIdleTimeout(30000);
server.addConnector(connector);

В этой конфигурации сервер будет прослушивать 169.20.45.12:80. Каждое соединение, установленное по этому адресу, будет иметь тайм-аут 30 секунд.

Если нам нужно настроить другие сокеты, мы можем добавить другие разъемы.

6. Заключение

В этом кратком руководстве мы сосредоточились на том, как настроить встроенный сервер с помощью Jetty. Мы также увидели, как выполнять дальнейшие настройки с помощью Handlers и Connectors .

Как всегда, весь используемый здесь код можно найти на GitHub .