CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-springframework-boot--spring-boot-starter-jetty

Starter for using Jetty as the embedded servlet container in Spring Boot applications

Pending
Overview
Eval results
Files

reactive-web-server.mddocs/

Reactive Web Server

Reactive web server implementation using Jetty for WebFlux applications. Provides non-blocking, reactive HTTP server capabilities optimized for high-concurrency applications with asynchronous I/O.

Capabilities

JettyReactiveWebServerFactory

Creates and configures Jetty reactive web server instances for Spring WebFlux applications.

/**
 * Factory for creating reactive Jetty web servers for WebFlux applications
 */
public class JettyReactiveWebServerFactory 
    extends AbstractReactiveWebServerFactory 
    implements ConfigurableJettyWebServerFactory {
    
    /** Create factory with default configuration */
    public JettyReactiveWebServerFactory();
    
    /** Create factory with specified port */
    public JettyReactiveWebServerFactory(int port);
    
    /** Create reactive web server with HTTP handler */
    public WebServer getWebServer(HttpHandler httpHandler);
    
    /** Add server customizers for additional configuration */
    public void addServerCustomizers(JettyServerCustomizer... customizers);
    
    /** Get collection of configured server customizers */
    public Collection<JettyServerCustomizer> getServerCustomizers();
    
    /** Set number of acceptor threads */
    public void setAcceptors(int acceptors);
    
    /** Set number of selector threads */
    public void setSelectors(int selectors);
    
    /** Configure forward headers handling */
    public void setUseForwardHeaders(boolean useForwardHeaders);
    
    /** Set resource factory for HTTP client resources */
    public void setResourceFactory(JettyResourceFactory resourceFactory);
    
    /** Get the configured resource factory */
    public JettyResourceFactory getResourceFactory();
    
    /** Set maximum number of connections */
    public void setMaxConnections(int maxConnections);
    
    /** Set thread pool configuration */
    public void setThreadPool(ThreadPool threadPool);
    
    /** Get the configured thread pool */
    public ThreadPool getThreadPool();
    
    /** Set collection of server customizers */
    public void setServerCustomizers(Collection<? extends JettyServerCustomizer> customizers);
}

Usage Examples:

@Configuration
public class JettyReactiveConfig {
    
    @Bean
    public JettyReactiveWebServerFactory jettyReactiveWebServerFactory() {
        JettyReactiveWebServerFactory factory = new JettyReactiveWebServerFactory(8080);
        
        // Configure for high concurrency
        factory.setAcceptors(1);
        factory.setSelectors(8);
        
        // Add custom server configuration
        factory.addServerCustomizers(server -> {
            // Configure HTTP/2 support
            HTTP2ServerConnectionFactory h2 = new HTTP2ServerConnectionFactory(
                new HttpConfiguration());
            
            ServerConnector connector = new ServerConnector(server, h2);
            connector.setPort(8080);
            server.addConnector(connector);
        });
        
        return factory;
    }
}

Resource Management

Jetty resource factory for managing HTTP client and server resources efficiently.

/**
 * Factory for managing Jetty HTTP client and server resources
 */
public class JettyResourceFactory implements DisposableBean, InitializingBean {
    
    /** Create resource factory with default configuration */
    public JettyResourceFactory();
    
    /** Get the HTTP client instance */
    public HttpClient getHttpClient();
    
    /** Get the executor for async operations */
    public Executor getExecutor();
    
    /** Get the scheduler for timed operations */
    public Scheduler getScheduler();
    
    /** Get the byte buffer pool */
    public ByteBufferPool getByteBufferPool();
    
    /** Set custom thread pool */
    public void setThreadPool(ThreadPool threadPool);
    
    /** Set custom executor */
    public void setExecutor(Executor executor);
    
    /** Set custom scheduler */
    public void setScheduler(Scheduler scheduler);
    
    /** Set custom byte buffer pool */
    public void setByteBufferPool(ByteBufferPool byteBufferPool);
    
    /** Lifecycle method - initialize resources */
    public void afterPropertiesSet() throws Exception;
    
    /** Lifecycle method - destroy resources */
    public void destroy() throws Exception;
}

HTTP/2 Support

HTTP/2 protocol support is configured through server customizers and Jetty's connection factories.

HTTP/2 Configuration Example:

@Configuration
public class Http2Config {
    
    @Bean
    public JettyReactiveWebServerFactory jettyFactory() {
        JettyReactiveWebServerFactory factory = new JettyReactiveWebServerFactory();
        
        factory.addServerCustomizers(server -> {
            HttpConfiguration httpConfig = new HttpConfiguration();
            httpConfig.setSendServerVersion(false);
            httpConfig.setSendXPoweredBy(false);
            
            // HTTP/1.1 configuration
            HttpConnectionFactory http1 = new HttpConnectionFactory(httpConfig);
            
            // HTTP/2 configuration
            HTTP2ServerConnectionFactory http2 = new HTTP2ServerConnectionFactory(httpConfig);
            http2.setMaxConcurrentStreams(100);
            http2.setInitialStreamRecvWindow(65536);
            
            // ALPN configuration for protocol negotiation
            ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
            alpn.setDefaultProtocol("http/1.1");
            
            ServerConnector connector = new ServerConnector(server, alpn, http2, http1);
            connector.setPort(8080);
            server.addConnector(connector);
        });
        
        return factory;
    }
}

Reactive Handler Integration

Integration with Spring WebFlux HttpHandler for reactive request processing.

/**
 * Jetty adapter for Spring WebFlux HttpHandler
 */
public class JettyHttpHandlerAdapter {
    
    /** Create adapter for HTTP handler */
    public JettyHttpHandlerAdapter(HttpHandler httpHandler);
    
    /** Handle reactive HTTP requests */
    public void handle(Request request, Response response, Callback callback);
    
    /** Configure request and response buffer sizes */
    public void setRequestBufferSize(int requestBufferSize);
    public void setResponseBufferSize(int responseBufferSize);
}

Server Lifecycle Management

Lifecycle management for reactive Jetty servers.

/**
 * Lifecycle management for reactive Jetty web servers
 */
public class JettyWebServer implements WebServer {
    
    /** Start the reactive server */
    public void start() throws WebServerException;
    
    /** Stop the server gracefully */
    public void stop() throws WebServerException;
    
    /** Get the server port */
    public int getPort();
    
    /** Get the underlying Jetty server */
    public Server getServer();
    
    /** Graceful shutdown with callback */
    public void shutDownGracefully(GracefulShutdownCallback callback);
}

Reactive Application Example:

@SpringBootApplication
public class ReactiveJettyApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(ReactiveJettyApplication.class, args);
    }
    
    @Bean
    public RouterFunction<ServerResponse> routes() {
        return RouterFunctions.route()
            .GET("/hello", request -> 
                ServerResponse.ok()
                    .contentType(MediaType.TEXT_PLAIN)
                    .body(Mono.just("Hello from Jetty!"), String.class))
            .build();
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-org-springframework-boot--spring-boot-starter-jetty

docs

http-client.md

index.md

reactive-web-server.md

server-configuration.md

servlet-web-server.md

websocket-support.md

tile.json