Starter for using Jetty as the embedded servlet container in Spring Boot applications
—
Core servlet container functionality using Jetty as the embedded server. Provides complete servlet container capabilities with Spring Boot integration, supporting traditional servlet-based web applications with blocking I/O.
Creates and configures Jetty servlet web server instances with comprehensive customization options.
/**
* Factory for creating JettyWebServer instances configured for servlet applications
*/
public class JettyServletWebServerFactory
extends AbstractServletWebServerFactory
implements ConfigurableJettyWebServerFactory, ResourceLoaderAware {
/** Create factory with default configuration */
public JettyServletWebServerFactory();
/** Create factory with specified port */
public JettyServletWebServerFactory(int port);
/** Create factory with context path and port */
public JettyServletWebServerFactory(String contextPath, int port);
/** Create web server with servlet context initializers */
public WebServer getWebServer(ServletContextInitializer... initializers);
/** 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 thread pool configuration */
public void setThreadPool(ThreadPool threadPool);
/** Get the configured thread pool */
public ThreadPool getThreadPool();
/** Set maximum number of connections */
public void setMaxConnections(int maxConnections);
/** Set resource loader for loading resources */
public void setResourceLoader(ResourceLoader resourceLoader);
/** Set collection of server customizers */
public void setServerCustomizers(Collection<? extends JettyServerCustomizer> customizers);
/** Add Jetty configurations */
public void addConfigurations(Configuration... configurations);
/** Set Jetty configurations */
public void setConfigurations(Collection<? extends Configuration> configurations);
/** Get configured Jetty configurations */
public Collection<Configuration> getConfigurations();
}Usage Examples:
@Configuration
public class JettyServletConfig {
@Bean
public JettyServletWebServerFactory jettyServletWebServerFactory() {
JettyServletWebServerFactory factory = new JettyServletWebServerFactory(8080);
// Configure acceptor and selector threads
factory.setAcceptors(2);
factory.setSelectors(4);
// Enable forward headers
factory.setUseForwardHeaders(true);
// Add custom server configuration
factory.addServerCustomizers(server -> {
// Configure server connectors
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);
connector.setIdleTimeout(30000);
server.addConnector(connector);
});
return factory;
}
}The actual web server implementation that manages the Jetty server lifecycle.
/**
* Jetty-based implementation of WebServer interface
*/
public class JettyWebServer implements WebServer {
/** Create Jetty web server with given server instance */
public JettyWebServer(Server server);
/** Create Jetty web server with server and auto-start option */
public JettyWebServer(Server server, boolean autoStart);
/** Start the Jetty server */
public void start() throws WebServerException;
/** Stop the Jetty server gracefully */
public void stop() throws WebServerException;
/** Get the port the server is running on */
public int getPort();
/** Get the underlying Jetty Server instance */
public Server getServer();
/** Shutdown the server gracefully with timeout */
public void shutDownGracefully(GracefulShutdownCallback callback);
/** Destroy the server */
public void destroy();
}Configuration classes for servlet-specific Jetty setup.
/**
* Jetty-specific embedded web application context
*/
public class JettyEmbeddedWebAppContext extends WebAppContext {
/** Create context with default configuration */
public JettyEmbeddedWebAppContext();
/** Create context with web app and context path */
public JettyEmbeddedWebAppContext(String webApp, String contextPath);
/** Set temporary directory for web app */
public void setTempDirectory(File tempDirectory);
/** Configure class loading behavior */
public void setParentLoaderPriority(boolean parentLoaderPriority);
/** Set session timeout in minutes */
public void setSessionTimeout(int sessionTimeout);
}
/**
* Configuration for servlet context initializers
*/
public class ServletContextInitializerConfiguration {
/** Apply initializers to servlet context */
public static void apply(ServletContextInitializer[] initializers,
ServletContext servletContext);
}Jetty-specific error handling configuration.
/**
* Custom error handler for Jetty embedded applications
*/
public class JettyEmbeddedErrorHandler extends ErrorHandler {
/** Create error handler with default configuration */
public JettyEmbeddedErrorHandler();
/** Handle errors and generate appropriate responses */
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response);
/** Set whether to show server information in error pages */
public void setShowServlet(boolean showServlet);
/** Set whether to show stack traces in error pages */
public void setShowStacks(boolean showStacks);
}Configuration Examples:
@Configuration
public class JettyErrorConfig {
@Bean
public JettyServletWebServerFactory jettyFactory() {
JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
factory.addServerCustomizers(server -> {
// Configure custom error handler
JettyEmbeddedErrorHandler errorHandler = new JettyEmbeddedErrorHandler();
errorHandler.setShowStacks(false);
errorHandler.setShowServlet(false);
// Apply to all contexts
Handler.Collection handlers = new Handler.Collection();
handlers.setHandlers(new Handler[]{
new DefaultHandler(),
errorHandler
});
server.setHandler(handlers);
});
return factory;
}
}Support for graceful server shutdown with connection draining.
/**
* Handles graceful shutdown of Jetty server
*/
public class GracefulShutdown implements TomcatConnectorCustomizer {
/** Create graceful shutdown handler */
public GracefulShutdown();
/** Initiate graceful shutdown with callback */
public void shutDownGracefully(GracefulShutdownCallback callback);
/** Set shutdown timeout period */
public void setTimeout(Duration timeout);
}Install with Tessl CLI
npx tessl i tessl/maven-org-springframework-boot--spring-boot-starter-jetty