Core server component of Eclipse Jetty web server providing HTTP server functionality, request handling, and connection management
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Eclipse Jetty Server is the core HTTP server component of the Eclipse Jetty web server. It provides a comprehensive API for building HTTP servers, handling HTTP requests and responses, managing connections, and serving static and dynamic content. The server supports HTTP/1.1, HTTP/2, and HTTP/3 protocols with extensive configuration options and handler-based request processing.
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>12.0.21</version>
</dependency>// Core server classes
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.HttpConfiguration;
// Handler interfaces and implementations
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.util.Callback;
// Context and resource handling
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ResourceHandler;
// Optional components
import org.eclipse.jetty.server.handler.gzip.GzipHandler;import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.util.Callback;
public class SimpleJettyServer {
public static void main(String[] args) throws Exception {
// Create server instance
Server server = new Server();
// Create and configure HTTP connector
ServerConnector connector = new ServerConnector(server);
connector.setPort(8080);
server.addConnector(connector);
// Create a simple handler
Handler handler = new Handler.Abstract() {
@Override
public boolean handle(Request request, Response response, Callback callback)
throws Exception {
response.setStatus(200);
response.getHeaders().put("Content-Type", "text/plain");
response.write(true, "Hello, Jetty!".getBytes(), callback);
return true;
}
};
server.setHandler(handler);
// Start the server
server.start();
server.join(); // Wait for server to finish
}
}Eclipse Jetty Server follows a component-based architecture with these key concepts:
Core server functionality including server lifecycle, connector management, and basic configuration.
public final class Server extends Handler.Wrapper implements Attributes {
// Constructors
public Server();
public Server(int port);
public Server(InetSocketAddress addr);
public Server(ThreadPool threadPool);
// Core server operations
public static String getVersion();
public URI getURI();
public void join() throws InterruptedException;
// Connector management
public Connector[] getConnectors();
public void addConnector(Connector connector);
public void setConnectors(Connector[] connectors);
// Handler management
public void setHandler(Handler handler);
public Handler getHandler();
public Request.Handler getErrorHandler();
public void setErrorHandler(Request.Handler errorHandler);
}HTTP request and response interfaces with content handling, headers, and lifecycle management.
public interface Request extends Attributes, Content.Source {
String getId();
String getMethod();
HttpURI getHttpURI();
HttpFields getHeaders();
List<HttpCookie> getCookies();
Session getSession(boolean create);
Context getContext();
ConnectionMetaData getConnectionMetaData();
interface Handler {
boolean handle(Request request, Response response, Callback callback) throws Exception;
}
}
public interface Response extends Content.Sink {
Request getRequest();
int getStatus();
void setStatus(int code);
HttpFields.Mutable getHeaders();
void write(boolean last, ByteBuffer byteBuffer, Callback callback);
}Flexible handler system for processing HTTP requests with support for wrapping, containers, and conditional processing.
public interface Handler extends LifeCycle, Destroyable, Request.Handler {
Server getServer();
void setServer(Server server);
interface Container extends Handler {
List<Handler> getHandlers();
boolean insertHandler(Handler handler);
boolean removeHandler(Handler handler);
}
abstract class Abstract extends AbstractLifeCycle implements Handler {
protected abstract boolean handle(Request request, Response response, Callback callback) throws Exception;
}
}Network connection handling with protocol factories, SSL support, and connection lifecycle management.
public interface Connector extends LifeCycle, Container, Graceful {
Server getServer();
Executor getExecutor();
Scheduler getScheduler();
ByteBufferPool getByteBufferPool();
ConnectionFactory getConnectionFactory(String protocol);
Collection<ConnectionFactory> getConnectionFactories();
}
public class ServerConnector extends AbstractNetworkConnector {
public ServerConnector(Server server);
public ServerConnector(Server server, ConnectionFactory... factories);
public void setPort(int port);
public int getPort();
public void setHost(String host);
public String getHost();
}HTTP protocol configuration including buffer sizes, timeouts, security settings, and protocol customizers.
public class HttpConfiguration implements Dumpable {
public HttpConfiguration();
public HttpConfiguration(HttpConfiguration config);
public void addCustomizer(Customizer customizer);
public List<Customizer> getCustomizers();
public int getOutputBufferSize();
public void setOutputBufferSize(int outputBufferSize);
public int getRequestHeaderSize();
public void setRequestHeaderSize(int requestHeaderSize);
public boolean getSendServerVersion();
public void setSendServerVersion(boolean sendServerVersion);
interface Customizer {
Request customize(Request request, HttpConfiguration configuration);
}
}Context-based request routing with virtual hosts, resource serving, and servlet-like contexts.
public class ContextHandler extends Handler.Wrapper implements Attributes, AliasCheck {
public String getContextPath();
public void setContextPath(String contextPath);
public Resource getBaseResource();
public void setBaseResource(Resource resource);
public List<String> getVirtualHosts();
public void setVirtualHosts(String... vhosts);
public ClassLoader getClassLoader();
public void setClassLoader(ClassLoader classLoader);
}
public class ResourceHandler extends Handler.Wrapper {
public Resource getBaseResource();
public void setBaseResource(Resource baseResource);
public List<String> getWelcomeFiles();
public void setWelcomeFiles(String... welcomeFiles);
}HTTP session management with creation, invalidation, and attribute storage.
public interface Session extends Attributes {
String getId();
Context getContext();
long getCreationTime();
long getLastAccessedTime();
void setMaxInactiveInterval(int interval);
int getMaxInactiveInterval();
void invalidate();
boolean isNew();
}Comprehensive request logging with customizable formats, file rotation, and SLF4J integration.
public interface RequestLog {
void log(Request request, Response response);
interface Writer {
void write(String requestEntry) throws IOException;
}
}
public class CustomRequestLog extends ContainerLifeCycle implements RequestLog {
public CustomRequestLog(RequestLog.Writer writer, String format);
public void setLogFormat(String format);
public String getLogFormat();
}SSL/TLS support, security customizers, and connection encryption.
public class SslConnectionFactory extends AbstractConnectionFactory
implements ConnectionFactory.Detecting, ConnectionFactory.Configuring {
public SslConnectionFactory(SslContextFactory.Server sslContextFactory, String nextProtocol);
public SslContextFactory.Server getSslContextFactory();
}
public class SecureRequestCustomizer implements HttpConfiguration.Customizer {
public void setSniRequired(boolean sniRequired);
public void setStsMaxAge(long stsMaxAge);
public void setStsIncludeSubDomains(boolean stsIncludeSubDomains);
}Specialized handlers for common functionality like GZIP compression, CORS, statistics, and error handling.
public class GzipHandler extends Handler.Wrapper implements GzipFactory {
public int getMinGzipSize();
public void setMinGzipSize(int minGzipSize);
public int getCompressionLevel();
public void setCompressionLevel(int compressionLevel);
public Set<String> getIncludedMimeTypes();
public void setIncludedMimeTypes(String... types);
}
public class StatisticsHandler extends EventsHandler {
public int getRequests();
public int getRequestsActive();
public long getBytesReceived();
public long getBytesSent();
}// Core callback interface for async operations
public interface Callback {
void succeeded();
void failed(Throwable x);
static Callback NOOP = new Callback() {
public void succeeded() {}
public void failed(Throwable x) {}
};
}
// HTTP URI representation
public interface HttpURI {
String getScheme();
String getHost();
int getPort();
String getPath();
String getQuery();
String getFragment();
}
// HTTP fields for headers
public interface HttpFields extends Iterable<HttpField> {
HttpField getField(String name);
String get(String name);
List<String> getValuesList(String name);
int size();
interface Mutable extends HttpFields {
HttpField put(String name, String value);
HttpField add(String name, String value);
boolean remove(String name);
void clear();
}
}
// Context for request processing
public interface Context extends Attributes, Decorator, Executor {
String getContextPath();
ClassLoader getClassLoader();
Resource getBaseResource();
List<String> getVirtualHosts();
MimeTypes getMimeTypes();
void run(Runnable runnable);
Request.Handler getErrorHandler();
}
// Thread pool interface
public interface ThreadPool extends Executor {
void join() throws InterruptedException;
int getThreads();
int getIdleThreads();
boolean isLowOnThreads();
}
// Graceful shutdown interface
public interface Graceful {
CompletableFuture<Void> shutdown();
boolean isShutdown();
}
// Resource abstraction
public interface Resource {
String getName();
boolean exists();
boolean isDirectory();
long length();
long lastModified();
InputStream newInputStream() throws IOException;
ReadableByteChannel newReadableByteChannel() throws IOException;
}