Введение в простой веб-сервер Java

Блог

ДомДом / Блог / Введение в простой веб-сервер Java

Sep 02, 2023

Введение в простой веб-сервер Java

Мэтью Тайсон, архитектор программного обеспечения, InfoWorld | Одной из наиболее удобных новых функций, включенных в выпуск Java 18 (март 2022 г.), стал новый простой веб-сервер, который упрощает развертывание и

Мэтью Тайсон

Архитектор программного обеспечения, InfoWorld |

Одной из наиболее удобных новых функций, включенных в выпуск Java 18 (март 2022 г.), стал новый простой веб-сервер, который упрощает развертывание и настройку файлового сервера HTTP. Он также предоставляет API, который расширяет существующий пакет httpserver для создания простых вариантов использования. Новый Simple Web Server — это полезный инструмент, который должен иметь в своем арсенале каждый Java-разработчик. Давайте проверим это!

Новая команда Java jwebserver упрощает запуск базового веб-сервера. Он аналогичен популярному инструменту SimpleHTTPServer в мире Python.

Первый шаг — убедиться, что вы используете Java 18 или более позднюю версию. Введите java --version, чтобы узнать, какую версию вы используете в данный момент. Я рекомендую использовать SDKMan для управления установками JDK. Это особенно полезно для манипулирования несколькими версиями.

Самое простое, что вы можете сделать с помощью Java Simple Web Server, — это обслуживать текущий каталог через порт 8000. Просто введите команду, показанную в листинге 1.

Оттуда, если вы зайдете в браузер и посетите localhost:8000, вы увидите список файловой системы, как показано на рисунке 1.

Есть несколько распространенных вещей, которые вам, возможно, придется сделать для точной настройки Simple Web Server в командной строке. Например, вы можете изменить порт, адрес для привязки (сетевой интерфейс для прослушивания) и каталог для обслуживания.

В листинге 2 вы можете увидеть, как прослушивать порт 8080, на всех интерфейсах и в каталоге /foo/bar.

Как видите, инструмент командной строки jwebserver позволяет обслуживать статические файлы, используя простейший синтаксис. Далее мы рассмотрим API простого веб-сервера.

Javadoc Simple Web Server — хорошая отправная точка для изучения API. Класс SimpleFileServer существует в пакете com.sun.net.httpserver. (В этом пакете также содержатся более старые, более низкоуровневые API для создания веб-серверов. Пакет httpserver расширяет эту функциональность для более простых требований.) Инструмент CLI jwebserver использует SimpleFileServer для выполнения своей работы, и мы также можем использовать его программно.

Класс SimpleFileServer обрабатывает только GET и HTTP/1.1. Однако мы можем сделать с ним кое-что интересное. Например, в этом введении в работу с Simple Web Server предлагается способ использования проекта файловой системы в памяти Google Java для имитации файловой системы для обработчика.

Мы собираемся использовать идею файловой системы в памяти, чтобы изменить FileHandler в SimpleFileServer, чтобы он фактически обслуживал виртуальную файловую систему из памяти. Затем мы воспользуемся пакетом httpserver для обработки POST и добавления искусственного файла в искусственную файловую систему.

Для начала давайте создадим быстрый проект Maven, используя следующую команду:

Теперь перейдите в новый каталог /jsws.

Установите версии компилятора и исходного кода на 18 в pom.xml, как описано здесь.

Затем добавьте Google jimfs к зависимостям, как показано в листинге 3.

Теперь мы можем изменить файл src/main/java/App.java, чтобы он обслуживал поддельную файловую систему. Код, позволяющий сделать это, вы можете увидеть в листинге 4.

Идея листинга 4 состоит в том, чтобы смоделировать стандартный API локальной файловой системы с помощью библиотеки jimfs с открытым исходным кодом Google, которая реализует API java.nio.file, но делает все в памяти, как виртуальная файловая система. Используя библиотеку, вы можете программно определять свои собственные пути к каталогам и файлам. Итак, мы создаем нашу собственную структуру виртуальных каталогов и передаем ее SimpleFileServer в качестве обработчика файлов.

Настраиваем класс SimpleFileServer программно:

При этом принимается интернет-адрес для привязки, как мы видели в командной строке. В данном случае мы передаем неуказанный интерфейс и порт 8080. После этого идет корень файловой системы. В этом примере мы предоставим ему объект Path, созданный нашим методом createDirectoryHierarchy().