CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-eclipse-jetty--jetty-servlet

Eclipse Jetty servlet container providing comprehensive servlet, filter, and listener integration with lifecycle management and dynamic registration support.

Pending
Overview
Eval results
Files

servlet-context.mddocs/

Servlet Context Management

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.

ServletContextHandler

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);
}

Basic Context Creation

// 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");

Servlet Registration

// 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 Management

// 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 Management

// 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);

ServletContainerInitializer Support

// SCI registration methods
public ServletContainerInitializerHolder addServletContainerInitializer(
    ServletContainerInitializer sci);
public ServletContainerInitializerHolder addServletContainerInitializer(
    ServletContainerInitializer sci, Class<?>... classes);
public void addServletContainerInitializer(
    ServletContainerInitializerHolder... sciHolders);

Security Integration

// 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);

Utility Methods

// 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);

Usage Examples

Complete Context Setup

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();

Context with Custom Handlers

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/*");

ServletContainerInitializer Registration

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);

Inner Classes and Interfaces

Context Implementation

public class Context extends ContextHandler.Context {
    // Extended ServletContext implementation
    // Provides servlet-specific context functionality
}

JSP Support Classes

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
}

ServletContainerInitializer Support

public interface ServletContainerInitializerCaller extends LifeCycle {
    // Interface for SCI caller implementations
}

public static class ServletContainerInitializerStarter extends ContainerLifeCycle 
        implements ServletContainerInitializerCaller {
    // SCI starter bean implementation
}

Configuration Patterns

Programmatic Configuration

// 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);

Handler Chain Configuration

// 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);

Event Listener Registration

// 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

docs

error-handling.md

filter-handling.md

index.md

listeners.md

monitoring.md

servlet-context.md

servlet-handling.md

testing.md

tile.json