CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-quarkus--quarkus-undertow

Quarkus extension providing servlet support through Undertow web server for cloud-native Java applications

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

index.mddocs/

Quarkus Undertow Extension

A Quarkus extension providing servlet support through the Undertow web server. This extension enables traditional Java web applications using servlet APIs (Jakarta Servlet) while maintaining Quarkus' cloud-native features including fast startup times, low memory usage, and native compilation support.

Package Information

  • Package Name: quarkus-undertow
  • Package Type: maven
  • Language: Java
  • Installation: Add dependency to your Quarkus project:
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-undertow</artifactId>
</dependency>

Core Imports

import io.quarkus.undertow.runtime.ServletRuntimeConfig;
import io.quarkus.undertow.runtime.UndertowDeploymentRecorder;

For CDI integration:

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import jakarta.inject.Inject;

For build-time configuration:

import io.quarkus.undertow.spi.ServletBuildItem;
import io.quarkus.undertow.spi.FilterBuildItem;
import io.quarkus.undertow.spi.ListenerBuildItem;

Basic Usage

Adding Servlets

@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        resp.setContentType("text/plain");
        resp.getWriter().write("Hello from Quarkus Undertow!");
    }
}

CDI Integration

@ApplicationScoped
public class ServletService {
    
    @Inject
    HttpServletRequest request;
    
    @Inject
    HttpServletResponse response;
    
    public void handleRequest() {
        // Use injected servlet objects
        String method = request.getMethod();
        response.setHeader("X-Processed-By", "Quarkus");
    }
}

Build-time Configuration

@BuildStep
ServletBuildItem createServlet() {
    return ServletBuildItem.builder("my-servlet", MyServlet.class.getName())
            .addMapping("/api/custom")
            .setAsyncSupported(true)
            .build();
}

Architecture

The Quarkus Undertow extension is structured as a multi-module Maven project with three main components:

  • Runtime Module: Provides servlet container integration, CDI producers, and runtime configuration
  • SPI Module: Defines build items for extension developers to register servlets, filters, and listeners
  • Deployment Module: Handles build-time processing and Undertow server configuration

Capabilities

Runtime API

Core runtime functionality including servlet container management, CDI integration, and session handling.

// Runtime configuration interface
@ConfigMapping(prefix = "quarkus.servlet")
public interface ServletRuntimeConfig {
    Optional<MemorySize> bufferSize();
    Optional<Boolean> directBuffers();
    int maxParameters();
}

// CDI producers for servlet objects  
@Singleton
public class ServletProducer {
    @Produces @RequestScoped
    public HttpServletRequest request();
    
    @Produces @RequestScoped
    public HttpServletResponse response();
    
    @Produces @RequestScoped
    public HttpSession session();
}

Runtime API

Build-time API

Extension points for registering servlets, filters, and listeners during application build.

// Register servlets at build time
public class ServletBuildItem extends MultiBuildItem {
    public static Builder builder(String name, String servletClass);
    public String getName();
    public String getServletClass();
    public List<String> getMappings();
}

// Register filters at build time
public class FilterBuildItem extends MultiBuildItem {
    public static Builder builder(String name, String filterClass);
    public String getName();
    public String getFilterClass();
    public List<FilterMappingInfo> getMappings();
}

Build-time API

Configuration

Runtime and build-time configuration options for servlet behavior, security, and performance tuning.

// Runtime configuration properties (quarkus.servlet.*)
public interface ServletRuntimeConfig {
    @WithDefault("1000")
    int maxParameters();
    
    Optional<MemorySize> bufferSize();
    Optional<Boolean> directBuffers();
}

Configuration

docs

build-time-api.md

configuration.md

index.md

runtime-api.md

tile.json