Maven

Inhalt der pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>de.qreator</groupId>
    <artifactId>Vertx</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>
XML
<dependencies>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
        <version>3.5.0</version>
    </dependency>
    <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-web</artifactId>
        <version>3.5.0</version>
    </dependency>
</dependencies>
XML
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>de.qreator</groupId>
    <artifactId>Vertx</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-web</artifactId>
            <version>3.5.0</version>
        </dependency>
    </dependencies>
</project>
XML

Einfacher Web-Server in vert.x

import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;

public class VertxSimple {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx(); (1)
        HttpServer server = vertx.createHttpServer(); (2)
        server.requestHandler(request -> { (3)
            HttpServerResponse response = request.response(); (4)
            response.putHeader("content-type", "text/plain"); (5)
            response.end("Hello World!"); (6)
        });
        server.listen(8080); (7)
    }
}
Java

Einfacher Web-Server mit vert.x-Web

import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;

public class VertxWeb {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        HttpServer server = vertx.createHttpServer();
        Router router = Router.router(vertx); (1)
        router.route().handler(routingContext -> { (2)
            HttpServerResponse response = routingContext.response();
            response.putHeader("content-type", "text/plain");
            response.end("Hello World from Vert.x-Web!");
        });
        server.requestHandler(router::accept).listen(8080); (3)
    }
}
Java

Mehrere Routen

Die Vorteile des Einsatzes eines Routers werden deutlicher, wenn man verschiedene Endpunkte erstellt.

router.route("/").handler(routingContext -> {
    HttpServerResponse response = routingContext.response();
    response.putHeader("content-type", "text/plain");
    response.end("Gib in der Adresszeile den Pfad \"daten\" oder \"produkte/Werkzeuge/Hammer\" ein.");
});
Java

Beispiel: www.qreator.de

router.route("/daten").handler(routingContext -> {
    HttpServerResponse response = routingContext.response();
    response.putHeader("content-type", "text/plain");
    response.end("Hier eine Nachricht vom Unterpfad \"/daten\"!");
});
Java

Beispiel: www.qreator.de/daten

router.route("/produkte/:produktTyp/:produktID").handler(routingContext -> {
    String produktTyp=routingContext.request().getParam("produktTyp");
    String produktID=routingContext.request().getParam("produktID");
    HttpServerResponse response = routingContext.response();
    response.putHeader("content-type", "text/plain");
    response.end("Die ProduktID ist "+produktID+" und der Produkttyp ist "+produktTyp);
});
Java

Beispiel: www.qreator.de/produkte/Werkzeug/Hammer

Statischer Router

router.route("/static/*").handler(StaticHandler.create().setDefaultContentEncoding("UTF-8"));
Java

Beispiel: www.qreator.de/static/index.html

AJAX-Requests

Anfrage durch den Client per Javascript

$("#eingabeKnopf").click(function () { (1)
    $.ajax({url:"../anfrage", data: (2)
            {
                typ: "namenKnopf",
                name: $("#eingabeName").val() (3)
            },
            success: function (data) { (4)
                $("body").append("<div>Daten: " + data.text+"<div>");
            }
        });
});
JavaScript

Bearbeitung der Anfrage auf Server-Seite

router.route("/anfrage").handler(routingContext -> {
    String typ = routingContext.request().getParam("typ");
    String name = routingContext.request().getParam("name");
    HttpServerResponse response = routingContext.response();
    response.putHeader("content-type", "application/json");
    JsonObject jo = new JsonObject();

    if (typ.equals("namenKnopf")) {
        jo.put("typ", "antwort");
        jo.put("text", "Der Text war " + name);
    }
    response.end(Json.encodePrettily(jo));
});
Java

Antwort: {typ: "antwort", text: "Der Text war Test"}

Wieder beim Client

{typ: "antwort", text: "Der Text war Test"}
JavaScript
success: function (data) {
    $("body").append("<div>Daten: " + data.text+"<div>");
}
JavaScript