Spec-Zone.ru › Vert.x 4

Начало работы с Vert.x

В этом руководстве вы узнаете, как начать работу с новым проектом Vert.x Web.

Перед началом работы вам необходимо:

  • JDK 11 или выше
  • Текстовый редактор или IDE
  • Maven 3 или выше
  • curl или HTTPie или браузер для выполнения HTTP-запросов

1Настройка

Чтобы создать новый проект, перейдите на start.vertx.io.

Выберите желаемую версию Vert.x, язык Java, Maven в качестве инструмента сборки и укажите идентификатор группы и артефакта. Затем добавьте зависимость Vert.x Web, введя её в поле «Зависимости». После завершения нажмите кнопку Создать проект. Сохраните полученный zip-архив на вашем компьютере и распакуйте его в папку по вашему выбору.

Созданный проект содержит:

  • Дескриптор сборки Maven pom.xml, настроенный для сборки и запуска вашего приложения
  • Пример Verticle и пример теста с использованием JUnit 5
  • Конфигурацию редактора для соблюдения стиля кода
  • Конфигурацию Git для игнорирования файлов

Если вы хотите попробовать сейчас, вы можете загрузить этот пример проекта с помощью Maven или с помощью Gradle.

2Код

Откройте проект в выбранном редакторе и перейдите к src/main/java/com/example/starter/MainVerticle.java. Этот исходный файл содержит пример Verticle (единица развертывания Vert.x), которая запускает HTTP-сервер. Вы измените его, чтобы приветствовать пользователя, выполнившего запросы к серверу. Измените код следующим образом:

Java
Kotlin
package com.example.starter;
 
import io.vertx.core.Future;
import io.vertx.core.VerticleBase;
import io.vertx.core.MultiMap;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
 
public class MainVerticle extends VerticleBase {
 
  @Override
  public Future<?> start() {
    // Create a Router
    Router router = Router.router(vertx);
 
    // Mount the handler for all incoming requests at every path and HTTP method
    router.route().handler(context -> {
      // Get the address of the request
      String address = context.request().connection().remoteAddress().toString();
      // Get the query parameter "name"
      MultiMap queryParams = context.queryParams();
      String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";
      // Write a json response
      context.json(
        new JsonObject()
          .put("name", name)
          .put("address", address)
          .put("message", "Hello " + name + " connected from " + address)
      );
    });
 
    // Create the HTTP server
    return vertx.createHttpServer()
      // Handle every request using the router
      .requestHandler(router)
      // Start listening
      .listen(8888)
      // Print the port on success
      .onSuccess(server -> {
        System.out.println("HTTP server started on port " + server.actualPort());
      })
      // Print the problem on failure
      .onFailure(throwable -> {
        throwable.printStackTrace();
      });
  }
}
class MainVerticle : VerticleBase() {
  override Future<*> start() {
    // Create a Router
    val router = Router.router(vertx)
 
    // Mount the handler for all incoming requests at every path and HTTP method
    router.route().handler { context ->
      // Get the address of the request
      val address = context.request().connection().remoteAddress().toString()
      // Get the query parameter "name"
      val queryParams = context.queryParams()
      val name = queryParams.get("name") ?: "unknown"
      // Write a json response
      context.json(
          json {
            obj(
              "name" to name,
              "address" to address,
              "message" to "Hello $name connected from $address"
            )
          }
      )
    }
 
    // Create the HTTP server
    return vertx.createHttpServer()
        // Handle every request using the router
        .requestHandler(router)
        // Start listening
        .listen(8888)
        // Print the port
        .onSuccess { server ->
          println("HTTP server started on port " + server.actualPort())
        }
  }
}

Этот код создаёт роутер Vert.x Web (объект для маршрутизации HTTP-запросов к определённым обработчикам запросов) и запускает HTTP-сервер на порту 8888. При каждом запросе он возвращает JSON-объект, содержащий адрес запроса, параметр запроса name и сообщение приветствия.

3Запуск

Чтобы запустить код, откройте терминал и перейдите в папку проекта. Соберите приложение следующим образом:

$ mvn package

Затем запустите приложение:

$ mvn exec:java
HTTP server started on port 8888
apr 03, 2020 11:49:21 AM io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
INFO: Succeeded in deploying verticle

Теперь, когда сервер запущен, попробуйте отправить запрос:

HTTPie
curl
$ http http://localhost:8888
HTTP/1.1 200 OK
content-length: 115
content-type: application/json; charset=utf-8
 
{
    "address": "0:0:0:0:0:0:0:1:32806",
    "message": "Hello unknown connected from 0:0:0:0:0:0:0:1:32806",
    "name": "unknown"
}
 
$ http http://localhost:8888\?name\="Francesco"
HTTP/1.1 200 OK
content-length: 119
content-type: application/json; charset=utf-8
 
{
    "address": "0:0:0:0:0:0:0:1:32822",
    "message": "Hello Francesco connected from 0:0:0:0:0:0:0:1:32822",
    "name": "Francesco"
}
$ curl -v http://localhost:8888
*   Trying ::1:8888...
* Connected to localhost (::1) port 8888 (#0)
> GET / HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.69.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8
< content-length: 115
<
* Connection #0 to host localhost left intact
{"name":"unknown","address":"0:0:0:0:0:0:0:1:59610","message":"Hello unknown connected from 0:0:0:0:0:0:0:1:59610"}
 
$ curl -v http://localhost:8888\?name\="Francesco"
*   Trying ::1:8888...
* Connected to localhost (::1) port 8888 (#0)
> GET /?name=Francesco HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.69.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8
< content-length: 119
<
* Connection #0 to host localhost left intact
{"name":"Francesco","address":"0:0:0:0:0:0:0:1:59708","message":"Hello Francesco connected from 0:0:0:0:0:0:0:1:59708"}

4Дальнейшие шаги

Теперь, когда вы получили представление о простоте и удобстве начала работы с Vert.x, вот несколько советов, которые помогут вам продвинуться в вашем путешествии:

Вступление

Прочитайте наше краткое введение в реактивное программирование с Eclipse Vert.x

Документация Core

Документация Vert.x Core научит вас писать реактивные приложения

Руководства

Ознакомьтесь с руководствами Vert.x, чтобы получить практическую помощь по конкретным темам

Руководства

Подробно изучите Vert.x с помощью наших руководств, охватывающих сложные темы

© 2025 Eclipse Vert.x™Eclipse Vert.x™ is open source and dual-licensed under the Eclipse Public License 2.0 and the Apache License 2.0.Website design by Michel Krämer.
https://vertx.io/docs/3.9.16

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API