Eclipse Jetty servlet container providing comprehensive servlet, filter, and listener integration with lifecycle management and dynamic registration support.
—
Servlet context management in Eclipse Jetty provides comprehensive functionality for creating, configuring, and managing servlet contexts with support for sessions, security, error handling, and dynamic registration.
The ServletContextHandler is the main class for servlet context management, extending Jetty's ContextHandler to provide servlet-specific functionality.
public class ServletContextHandler extends ContextHandler {
// Options constants
public static final int SESSIONS = 1;
public static final int SECURITY = 2;
public static final int NO_SESSIONS = 0;
public static final int NO_SECURITY = 0;
// Constructors
public ServletContextHandler();
public ServletContextHandler(int options);
public ServletContextHandler(HandlerContainer parent, String contextPath);
public ServletContextHandler(HandlerContainer parent, String contextPath, int options);
public ServletContextHandler(HandlerContainer parent, String contextPath,
boolean sessions, boolean security);
public ServletContextHandler(HandlerContainer parent,
SessionHandler sessionHandler,
SecurityHandler securityHandler,
ServletHandler servletHandler,
ErrorHandler errorHandler);
public ServletContextHandler(HandlerContainer parent, String contextPath,
SessionHandler sessionHandler,
SecurityHandler securityHandler,
ServletHandler servletHandler,
ErrorHandler errorHandler);
public ServletContextHandler(HandlerContainer parent, String contextPath,
SessionHandler sessionHandler,
SecurityHandler securityHandler,
ServletHandler servletHandler,
ErrorHandler errorHandler, int options);
}// Simple context with default configuration
ServletContextHandler context = new ServletContextHandler("/myapp");
// Context with sessions enabled
ServletContextHandler contextWithSessions =
new ServletContextHandler(ServletContextHandler.SESSIONS);
// Context with both sessions and security
ServletContextHandler fullContext =
new ServletContextHandler(ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY);
// Context with parent handler and path
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(server, "/api");// Add servlet methods
public ServletHolder addServlet(String className, String pathSpec);
public ServletHolder addServlet(Class<? extends Servlet> servlet, String pathSpec);
public void addServlet(ServletHolder servlet, String pathSpec);
// Filter methods
public void addFilter(FilterHolder holder, String pathSpec,
EnumSet<DispatcherType> dispatches);
public FilterHolder addFilter(Class<? extends Filter> filterClass, String pathSpec,
EnumSet<DispatcherType> dispatches);
public FilterHolder addFilter(String filterClass, String pathSpec,
EnumSet<DispatcherType> dispatches);// Handler access methods
public ServletHandler getServletHandler();
public SessionHandler getSessionHandler();
public SecurityHandler getSecurityHandler();
// Handler configuration
public void setSessionHandler(SessionHandler sessionHandler);
public void setSecurityHandler(SecurityHandler securityHandler);
public void setServletHandler(ServletHandler servletHandler);
public void insertHandler(HandlerWrapper handler);
// Handler creation hooks
protected SessionHandler newSessionHandler();
protected SecurityHandler newSecurityHandler();
protected ServletHandler newServletHandler();// Lifecycle methods
protected void startContext();
protected void stopContext();
// Context listener support
public boolean addEventListener(EventListener listener);
public void callContextInitialized(ServletContextListener l, ServletContextEvent e);
public void callContextDestroyed(ServletContextListener l, ServletContextEvent e);// SCI registration methods
public ServletContainerInitializerHolder addServletContainerInitializer(
ServletContainerInitializer sci);
public ServletContainerInitializerHolder addServletContainerInitializer(
ServletContainerInitializer sci, Class<?>... classes);
public void addServletContainerInitializer(
ServletContainerInitializerHolder... sciHolders);// Security configuration
public Class<? extends SecurityHandler> getDefaultSecurityHandlerClass();
public void setDefaultSecurityHandlerClass(
Class<? extends SecurityHandler> defaultSecurityHandlerClass);
public Set<String> setServletSecurity(
ServletRegistration.Dynamic registration,
ServletSecurityElement servletSecurityElement);
protected void addRoles(String... roleNames);// Static utility methods
public static ServletContextHandler getServletContextHandler(
ServletContext servletContext, String purpose);
public static ServletContextHandler getServletContextHandler(ServletContext context);
// Object factory access
public DecoratedObjectFactory getObjectFactory();
// Dynamic registration support
protected ServletRegistration.Dynamic dynamicHolderAdded(ServletHolder holder);import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.server.Server;
import jakarta.servlet.DispatcherType;
import java.util.EnumSet;
// Create server and context
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler("/webapp");
// Add servlets
context.addServlet(MyServlet.class, "/data/*");
context.addServlet("com.example.ConfigServlet", "/config");
// Add filters
FilterHolder filterHolder = new FilterHolder(LoggingFilter.class);
filterHolder.setInitParameter("logLevel", "INFO");
context.addFilter(filterHolder, "/*", EnumSet.of(DispatcherType.REQUEST));
// Add context to server
server.setHandler(context);
server.start();import org.eclipse.jetty.security.SecurityHandler;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.ServletHandler;
// Create custom handlers
SessionHandler sessionHandler = new SessionHandler();
SecurityHandler securityHandler = new MySecurityHandler();
ServletHandler servletHandler = new ServletHandler();
// Create context with custom handlers
ServletContextHandler context = new ServletContextHandler(
null, // no parent
"/secure",
sessionHandler,
securityHandler,
servletHandler,
null // default error handler
);
// Configure session timeout
sessionHandler.setMaxInactiveInterval(1800); // 30 minutes
// Register servlets through the servlet handler
servletHandler.addServletWithMapping(SecureServlet.class, "/secure/*");import jakarta.servlet.ServletContainerInitializer;
import jakarta.servlet.ServletContext;
import jakarta.servlet.annotation.HandlesTypes;
import java.util.Set;
@HandlesTypes({WebServlet.class, WebFilter.class})
public class MyInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> webAppInitializerClasses,
ServletContext servletContext) {
// Initialize web components
for (Class<?> clazz : webAppInitializerClasses) {
// Process annotated classes
}
}
}
// Register the initializer
ServletContextHandler context = new ServletContextHandler("/app");
context.addServletContainerInitializer(new MyInitializer(),
WebServlet.class, WebFilter.class);public class Context extends ContextHandler.Context {
// Extended ServletContext implementation
// Provides servlet-specific context functionality
}public static class JspPropertyGroup implements JspPropertyGroupDescriptor {
// JSP property group implementation
}
public static class TagLib implements TaglibDescriptor {
// Tag library descriptor implementation
}
public static class JspConfig implements JspConfigDescriptor {
// JSP configuration descriptor implementation
}public interface ServletContainerInitializerCaller extends LifeCycle {
// Interface for SCI caller implementations
}
public static class ServletContainerInitializerStarter extends ContainerLifeCycle
implements ServletContainerInitializerCaller {
// SCI starter bean implementation
}// Create context with all features enabled
ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY);
context.setContextPath("/myapp");
// Configure display name
context.setDisplayName("My Application");
// Set context parameters
context.setInitParameter("config.location", "/etc/myapp/config.xml");
context.setInitParameter("debug.enabled", "true");
// Add error pages
ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
errorHandler.addErrorPage(404, "/error/404.html");
errorHandler.addErrorPage(500, "/error/500.html");
context.setErrorHandler(errorHandler);// Create handlers in order
ServletContextHandler context = new ServletContextHandler("/app");
// Insert additional handlers
GzipHandler gzipHandler = new GzipHandler();
context.insertHandler(gzipHandler);
// Configure security
LoginService loginService = new HashLoginService("MyRealm", "realm.properties");
ConstraintSecurityHandler security = new ConstraintSecurityHandler();
security.setLoginService(loginService);
context.setSecurityHandler(security);// Add various types of listeners
context.addEventListener(new MyServletContextListener());
context.addEventListener(new MyHttpSessionListener());
context.addEventListener(new MyServletRequestListener());
// Use decorating listener for dependency injection
DecoratingListener decorator = new DecoratingListener(context, "dependencyInjector");
context.addEventListener(decorator);Install with Tessl CLI
npx tessl i tessl/maven-org-eclipse-jetty--jetty-servlet