# Module

Spring Web teilt sich in zwei große Hauptmodule.

# Spring Web MVC

Doku (opens new window), auch "spring-webmvc"

Dieses Modul ist das ältere von beiden und benutzt die Java Servlet API. Das bedeutet, dass es in einem geeigneten Application Server (z. B. Tomcat) laufen muss.

Dank Spring Boot wird ein embedded Tomcat 9 mitgeliefert, womit die Applikation auch standalone lauffähig ist. Ansonsten kann die von Gradle erzeugte JAR oder WAR Datei aber auch in einem vorhandenem Application Server deployed werden.

Um Spring Web MVC zu nutzen, sind folgende Dependencies (in build.gradle.kts) nötig:

implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

Diese werden bei Benutzung von Spring Initializr automatisch eingefügt, wenn man "Spring Web" bei der Projekterstellung als Dependency auswählt. Die genauen Versionen werden von Spring Boot ergänzt (jedes Spring Release bringt eine Liste (BOM) von Dependency-Versionen mit, mit denen es am besten läuft).

# Spring Reactive Web

TIP

Empfohlen!

Doku (opens new window), auch "spring-webflux"

Dieses Modul benutzt im Hintergrund Reactive Streams und benötigt im Unterbau einen entsprechenden Non-Blocking Server. Mit Spring Boot ist das standardmäßig ein embedded Netty-Server.

Um Spring Reactive Web zu nutzen, sind folgende Dependencies (oder "Spring Reactive Web" im Initializr) nötig:

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
testImplementation("io.projectreactor:reactor-test")

Einfache, synchrone Aufrufe können hier genauso umgesetzt werden, wie in Spring Web MVC. Zusätzlich sind aber auch asynchrone Aufrufe möglich, was der Performance zuträglich ist, da Threads und somit CPU-Zeit besser ausgenutzt werden können. Das geschieht entweder durch das Benutzen von Flux (opens new window) und Mono (opens new window) (aus der Java Welt) oder den Kotlin-eigenen Flows (opens new window) und Coroutinen (opens new window).

# Einstellungen

Der integrierte Webserver startet standardmäßig auf Port 8080. Ist dieser Port schon belegt, wird die Anwendung mit einem Fehler beendet. Mit der Konfiguration server.port kann der Port geändert werden.

server.port=8085