diff --git a/pom.xml b/pom.xml index 85cbab6..90164f1 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,14 @@ 1.4.11 + + + io.undertow + undertow-servlet + 2.3.10.Final + + + diff --git a/src/main/java/example/undertow/UndertowMicroserviceGET.java b/src/main/java/example/undertow/UndertowMicroserviceGET.java new file mode 100644 index 0000000..4c0cb8f --- /dev/null +++ b/src/main/java/example/undertow/UndertowMicroserviceGET.java @@ -0,0 +1,61 @@ +package example.undertow; + +import io.undertow.Handlers; +import io.undertow.Undertow; +import io.undertow.server.HttpHandler; +import io.undertow.server.handlers.PathHandler; +import io.undertow.servlet.Servlets; +import io.undertow.servlet.api.DeploymentInfo; +import io.undertow.servlet.api.DeploymentManager; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.PrintWriter; + +/** + * Hostet einen einfachen Microservice unter localhost/micro + */ +public class UndertowMicroserviceGET { + private static final Logger logger = LoggerFactory.getLogger(UndertowResourceHosting.class); + + @SuppressWarnings("DuplicatedCode") // example code. Duplication is allowed + public static void main(String[] args) throws ServletException { + DeploymentInfo deployment = Servlets.deployment() + .setClassLoader(UndertowResourceHosting.class.getClassLoader()) + .setContextPath("") + .setDeploymentName("Example_UndertowMicroserviceGET") + .addServlet(Servlets.servlet("ExampleMicroservice", MicroserviceImpl.class).addMapping("/micro")); + + DeploymentManager manager = Servlets.defaultContainer().addDeployment(deployment); + manager.deploy(); + HttpHandler handler = manager.start(); + PathHandler pathHandler = Handlers.path(handler); + + Undertow server = Undertow.builder() + .addHttpListener(8080, "localhost") + .setHandler(pathHandler) + .build(); + server.start(); + logger.info("Server started"); + } + + public static final class MicroserviceImpl extends HttpServlet { + private int numberOfRequests = 0; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + numberOfRequests++; + String message = "Your visitor-number is #" + numberOfRequests; + + resp.setContentType("text/html"); + PrintWriter responseWriter = resp.getWriter(); + responseWriter.println("

" + message + "

"); + responseWriter.close(); + } + } +} diff --git a/src/main/java/example/undertow/UndertowResourceHosting.java b/src/main/java/example/undertow/UndertowResourceHosting.java new file mode 100644 index 0000000..bcbc323 --- /dev/null +++ b/src/main/java/example/undertow/UndertowResourceHosting.java @@ -0,0 +1,43 @@ +package example.undertow; + +import io.undertow.Handlers; +import io.undertow.Undertow; +import io.undertow.server.HttpHandler; +import io.undertow.server.handlers.PathHandler; +import io.undertow.server.handlers.resource.ClassPathResourceManager; +import io.undertow.servlet.Servlets; +import io.undertow.servlet.api.DeploymentInfo; +import io.undertow.servlet.api.DeploymentManager; +import jakarta.servlet.ServletException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Einfaches Undertow Beispiel mit Resource hosting.

+ * Ressourcen können dann im Browser geöffnet werden, + * z.B. 'Bishop-W.png' + */ +public class UndertowResourceHosting { + private static final Logger logger = LoggerFactory.getLogger(UndertowResourceHosting.class); + + @SuppressWarnings("DuplicatedCode") // example code. Duplication is allowed + public static void main(String[] args) throws ServletException { + DeploymentInfo deployment = Servlets.deployment() + .setClassLoader(UndertowResourceHosting.class.getClassLoader()) + .setContextPath("") + .setDeploymentName("Example_UndertowResourceHosting") + .setResourceManager(new ClassPathResourceManager(UndertowResourceHosting.class.getClassLoader())); + + DeploymentManager manager = Servlets.defaultContainer().addDeployment(deployment); + manager.deploy(); + HttpHandler handler = manager.start(); + PathHandler pathHandler = Handlers.path(handler); + + Undertow server = Undertow.builder() + .addHttpListener(8080, "localhost") + .setHandler(pathHandler) + .build(); + server.start(); + logger.info("Server started"); + } +}