Quarkus extension providing servlet support through Undertow web server for cloud-native Java applications
—
The Quarkus Undertow extension provides both runtime and build-time configuration options for controlling servlet behavior, performance settings, and server configuration.
Configuration is handled through Quarkus configuration system:
import io.quarkus.undertow.runtime.ServletRuntimeConfig;
import io.quarkus.undertow.deployment.ServletConfig;
import io.smallrye.config.ConfigMapping;Runtime configuration properties affect the behavior during application execution and can be modified at runtime.
Runtime configuration interface for servlet settings.
@ConfigMapping(prefix = "quarkus.servlet")
public interface ServletRuntimeConfig {
/**
* Buffer size for servlet operations
* Configuration property: quarkus.servlet.buffer-size
*/
Optional<MemorySize> bufferSize();
/**
* Whether to use direct buffers
* Configuration property: quarkus.servlet.direct-buffers
*/
Optional<Boolean> directBuffers();
/**
* Maximum number of HTTP request parameters
* Configuration property: quarkus.servlet.max-parameters
* Default value: 1000
*/
@WithDefault("1000")
int maxParameters();
}| Property | Type | Default | Description |
|---|---|---|---|
quarkus.servlet.buffer-size | MemorySize | - | Buffer size for servlet operations (e.g., "8K", "1M") |
quarkus.servlet.direct-buffers | boolean | - | Whether to use direct buffers for improved performance |
quarkus.servlet.max-parameters | int | 1000 | Maximum number of HTTP request parameters |
# application.properties
quarkus.servlet.buffer-size=16K
quarkus.servlet.direct-buffers=true
quarkus.servlet.max-parameters=2000Build-time configuration properties are resolved during application build and cannot be changed at runtime.
Build-time configuration interface for servlet settings.
@ConfigMapping(prefix = "quarkus.servlet")
public interface ServletConfig {
/**
* Context path for servlet content
* Configuration property: quarkus.servlet.context-path
*/
Optional<String> contextPath();
/**
* Default charset for requests and responses
* Configuration property: quarkus.servlet.default-charset
* Default value: UTF-8
*/
@WithDefault("UTF-8")
String defaultCharset();
}Converter for processing context path values.
public static class ContextPathConverter implements Converter<String> {
/**
* Convert and validate context path value
*/
public String convert(String value) throws IllegalArgumentException;
}| Property | Type | Default | Description |
|---|---|---|---|
quarkus.servlet.context-path | String | - | Context path for servlet content (e.g., "/api", "/webapp") |
quarkus.servlet.default-charset | String | UTF-8 | Default charset for HTTP requests and responses |
# application.properties
quarkus.servlet.context-path=/api
quarkus.servlet.default-charset=UTF-8For high-throughput applications, consider these configuration optimizations:
# Enable direct buffers for better performance
quarkus.servlet.direct-buffers=true
# Increase buffer size for large requests
quarkus.servlet.buffer-size=32K
# Adjust max parameters for complex forms
quarkus.servlet.max-parameters=5000For development environments, you might want different settings:
# Development profile (application-dev.properties)
quarkus.servlet.context-path=/dev
quarkus.servlet.max-parameters=500For production deployments:
# Production profile (application-prod.properties)
quarkus.servlet.context-path=/
quarkus.servlet.buffer-size=64K
quarkus.servlet.direct-buffers=true
quarkus.servlet.max-parameters=10000You can inject configuration into your application components:
@ApplicationScoped
public class ServletConfigService {
@Inject
ServletRuntimeConfig runtimeConfig;
public void logConfiguration() {
System.out.println("Max parameters: " + runtimeConfig.maxParameters());
runtimeConfig.bufferSize().ifPresent(size ->
System.out.println("Buffer size: " + size));
runtimeConfig.directBuffers().ifPresent(direct ->
System.out.println("Direct buffers: " + direct));
}
}Use Quarkus profiles to configure different environments:
# Base configuration
quarkus.servlet.default-charset=UTF-8
# Development profile
%dev.quarkus.servlet.context-path=/dev
%dev.quarkus.servlet.max-parameters=100
# Test profile
%test.quarkus.servlet.context-path=/test
%test.quarkus.servlet.max-parameters=50
# Production profile
%prod.quarkus.servlet.context-path=/
%prod.quarkus.servlet.buffer-size=64K
%prod.quarkus.servlet.direct-buffers=true// Configuration annotations
import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault;
import io.smallrye.config.Converter;
// Memory size type
import io.quarkus.runtime.configuration.MemorySize;
// Standard Java types
import java.util.Optional;
// CDI injection
import jakarta.inject.Inject;
import jakarta.enterprise.context.ApplicationScoped;Install with Tessl CLI
npx tessl i tessl/maven-io-quarkus--quarkus-undertow