Quarkus extension providing servlet support through Undertow web server for cloud-native Java applications
—
The runtime module provides the core servlet container integration, CDI support, and session management capabilities for Quarkus applications.
import io.quarkus.undertow.runtime.ServletRuntimeConfig;
import io.quarkus.undertow.runtime.UndertowDeploymentRecorder;
import io.quarkus.undertow.runtime.ServletProducer;
import io.quarkus.undertow.runtime.HttpSessionContext;Runtime configuration interface for servlet settings.
@ConfigMapping(prefix = "quarkus.servlet")
public interface ServletRuntimeConfig {
/**
* Buffer size for servlet operations
*/
Optional<MemorySize> bufferSize();
/**
* Use direct buffers setting
*/
Optional<Boolean> directBuffers();
/**
* Maximum HTTP request parameters (default: 1000)
*/
@WithDefault("1000")
int maxParameters();
}Main recorder class responsible for servlet deployment and configuration during application startup.
public class UndertowDeploymentRecorder {
public static final HttpHandler ROOT_HANDLER;
public static final int DEFAULT_BUFFER_SIZE;
public static final boolean DEFAULT_DIRECT_BUFFERS;
/**
* Create servlet deployment
*/
public void createDeployment(DeploymentInfo deploymentInfo,
Map<String, Object> servletConfig);
/**
* Register servlet instance
*/
public void registerServlet(String name, String servletClass,
List<String> mappings, Map<String, String> initParams,
boolean asyncSupported, int loadOnStartup);
/**
* Register filter instance
*/
public void registerFilter(String name, String filterClass,
List<FilterMappingInfo> mappings,
Map<String, String> initParams,
boolean asyncSupported);
/**
* Register listener
*/
public void registerListener(String listenerClass);
/**
* Start Undertow server
*/
public void startUndertow(Supplier<Undertow> undertowSupplier);
/**
* Boot servlet container
*/
public void bootServletContainer(DeploymentManager manager);
/**
* Configure security
*/
public void setupSecurity(SecurityDomain securityDomain);
/**
* Get servlet context supplier
*/
public Supplier<ServletContext> servletContextSupplier();
}CDI producers for servlet objects, enabling dependency injection of servlet components.
@Singleton
public class ServletProducer {
/**
* Produce servlet request for injection
*/
@Produces
@RequestScoped
public HttpServletRequest request();
/**
* Produce servlet response for injection
*/
@Produces
@RequestScoped
public HttpServletResponse response();
/**
* Produce HTTP session for injection
*/
@Produces
@RequestScoped
public HttpSession session();
}@ApplicationScoped
public class MyService {
@Inject
HttpServletRequest request;
@Inject
HttpServletResponse response;
public void processRequest() {
String method = request.getMethod();
String userAgent = request.getHeader("User-Agent");
response.setHeader("X-Processed-By", "Quarkus");
response.setContentType("application/json");
}
}CDI context implementation for HTTP session scope management.
public class HttpSessionContext implements InjectableContext, HttpSessionListener {
/**
* Get the scope annotation class
*/
public Class<? extends Annotation> getScope();
/**
* Get contextual instance with creation context
*/
public <T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext);
/**
* Get existing contextual instance
*/
public <T> T get(Contextual<T> contextual);
/**
* Check if context is active
*/
public boolean isActive();
/**
* Destroy contextual instance
*/
public void destroy(Contextual<?> contextual);
/**
* Handle session creation event
*/
public void sessionCreated(HttpSessionEvent event);
/**
* Handle session destruction event
*/
public void sessionDestroyed(HttpSessionEvent event);
}Error handling servlet for processing application errors.
public class QuarkusErrorServlet extends HttpServlet {
public static final String SHOW_STACK = "show-stack";
public static final String SHOW_DECORATION = "show-decoration";
public static final String SRC_MAIN_JAVA = "src-main-java";
public static final String KNOWN_CLASSES = "known-classes";
/**
* Handle error requests
*/
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException;
}Resource manager for handling static resources with known paths.
public class KnownPathResourceManager implements ResourceManager {
/**
* Constructor with known paths and delegate manager
*/
public KnownPathResourceManager(Set<String> files, Set<String> directories,
ResourceManager delegate);
/**
* Get resource by path
*/
public Resource getResource(String path) throws IOException;
/**
* Close resource manager
*/
public void close() throws IOException;
}Account implementation for Undertow security integration.
public class QuarkusUndertowAccount implements Account {
public Principal getPrincipal();
public Set<String> getRoles();
}HTTP security policy implementation for servlet security.
public class ServletHttpSecurityPolicy implements HttpSecurityPolicy {
public AuthenticationMechanismOutcome authenticate(HttpServerExchange exchange,
SecurityContext securityContext);
}// Common types used throughout the runtime API
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import io.undertow.server.HttpHandler;
import io.undertow.servlet.api.DeploymentInfo;
import io.undertow.servlet.api.DeploymentManager;
import io.undertow.Undertow;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Singleton;
import java.util.Optional;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;Install with Tessl CLI
npx tessl i tessl/maven-io-quarkus--quarkus-undertow