Eclipse Jetty servlet container providing comprehensive servlet, filter, and listener integration with lifecycle management and dynamic registration support.
npx @tessl/cli install tessl/maven-org-eclipse-jetty--jetty-servlet@11.0.0Eclipse Jetty servlet container provides comprehensive servlet, filter, and listener integration with lifecycle management and dynamic registration support. It offers a complete implementation of the Jakarta Servlet specification with embedded server capabilities, programmatic configuration, and extensive testing utilities.
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>11.0.25</version>
</dependency>// Core servlet handling
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;
// Filter management
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.FilterMapping;
// Context and lifecycle
import org.eclipse.jetty.servlet.Source;
import org.eclipse.jetty.server.Handler;
// Jakarta Servlet API
import jakarta.servlet.Servlet;
import jakarta.servlet.Filter;
import jakarta.servlet.DispatcherType;import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.server.Server;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
// Create a simple servlet
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.getWriter().println("Hello, World!");
}
}
// Configure servlet context with embedded server
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler("/myapp");
context.addServlet(HelloServlet.class, "/hello");
server.setHandler(context);
server.start();The Jetty servlet module follows a hierarchical handler structure:
Create and configure servlet contexts with comprehensive session, security, and error handling support.
public class ServletContextHandler extends ContextHandler {
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;
public ServletContextHandler();
public ServletContextHandler(int options);
public ServletContextHandler(HandlerContainer parent, String contextPath);
public ServletContextHandler(HandlerContainer parent, String contextPath, int options);
public ServletHolder addServlet(String className, String pathSpec);
public ServletHolder addServlet(Class<? extends Servlet> servlet, String pathSpec);
public void addServlet(ServletHolder servlet, String pathSpec);
public FilterHolder addFilter(Class<? extends Filter> filterClass, String pathSpec,
EnumSet<DispatcherType> dispatches);
public ServletHandler getServletHandler();
public SessionHandler getSessionHandler();
public SecurityHandler getSecurityHandler();
}Manage servlet lifecycle, registration, and URL pattern mapping with comprehensive configuration options.
public class ServletHandler extends ScopedHandler {
public ServletHolder[] getServlets();
public ServletMapping[] getServletMappings();
public ServletHolder newServletHolder(Source source);
public ServletHolder getServlet(String name);
public ServletHolder addServletWithMapping(String className, String pathSpec);
public ServletHolder addServletWithMapping(Class<? extends Servlet> servlet, String pathSpec);
public void addServlet(ServletHolder servletHolder);
public void addServletMapping(ServletMapping servletMapping);
}
public class ServletHolder extends Holder<Servlet> {
public ServletHolder();
public ServletHolder(String name, Class<? extends Servlet> servlet);
public ServletHolder(String name, Servlet servlet);
public void setServlet(Servlet servlet);
public Servlet getServlet();
public int getInitOrder();
public void setInitOrder(int order);
public boolean isEnabled();
public void setEnabled(boolean enabled);
}Configure request/response filtering with dispatcher type control and URL pattern matching.
public class FilterHolder extends Holder<Filter> {
public FilterHolder();
public FilterHolder(Class<? extends Filter> filter);
public FilterHolder(Filter filter);
public void setFilter(Filter filter);
public Filter getFilter();
public FilterRegistration.Dynamic getRegistration();
}
public class FilterMapping implements Dumpable {
public static final int REQUEST = 1;
public static final int FORWARD = 2;
public static final int INCLUDE = 4;
public static final int ERROR = 8;
public static final int ASYNC = 16;
public static final int ALL = 31;
public String getFilterName();
public void setFilterName(String filterName);
public String[] getPathSpecs();
public void setPathSpecs(String[] pathSpecs);
public EnumSet<DispatcherType> getDispatcherTypes();
public void setDispatcherTypes(EnumSet<DispatcherType> dispatcherTypes);
}Handle servlet context events and lifecycle callbacks with decoration capabilities.
public class ListenerHolder extends BaseHolder<EventListener> {
public ListenerHolder();
public ListenerHolder(Source source);
public ListenerHolder(Class<? extends EventListener> listener);
public void setListener(EventListener listener);
public EventListener getListener();
}
public class DecoratingListener implements ServletContextAttributeListener {
public DecoratingListener(ServletContextHandler context, String attributeName);
public void attributeAdded(ServletContextAttributeEvent event);
public void attributeRemoved(ServletContextAttributeEvent event);
public void attributeReplaced(ServletContextAttributeEvent event);
}Map HTTP errors and exceptions to custom error pages with comprehensive error response management.
public class ErrorPageErrorHandler extends ErrorHandler
implements ErrorHandler.ErrorPageMapper {
public ErrorPageErrorHandler();
public String getErrorPage(HttpServletRequest request);
public void addErrorPage(String pathSpec, String error);
public void addErrorPage(int code, String error);
public void addErrorPage(Class<? extends Throwable> exception, String error);
public Map<String, String> getErrorPages();
public void setErrorPages(Map<String, String> errorPages);
}Comprehensive testing framework for servlets without requiring a full server deployment.
public class ServletTester extends ContainerLifeCycle {
public ServletTester();
public ServletTester(String contextPath);
public ServletContextHandler getContext();
public void setContextPath(String contextPath);
public String getContextPath();
public void addServlet(Class<? extends Servlet> servlet, String pathSpec);
public ServletHolder addServlet(String className, String pathSpec);
public void addFilter(Class<? extends Filter> filter, String pathSpec,
EnumSet<DispatcherType> dispatches);
public String getResponses(String request);
public String getResponses(String request, long idleFor, TimeUnit units);
}Server monitoring capabilities with JMX support and comprehensive statistics reporting.
public class StatisticsServlet extends HttpServlet {
public StatisticsServlet();
public void init(ServletConfig config);
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}public abstract class BaseHolder<T> extends AbstractLifeCycle implements Dumpable {
public enum Source {
EMBEDDED, JAKARTA_API, DESCRIPTOR, ANNOTATION
}
public Source getSource();
public void initialize();
public String getClassName();
public Class<? extends T> getHeldClass();
public ServletHandler getServletHandler();
public void setServletHandler(ServletHandler servletHandler);
public void setClassName(String className);
public void setHeldClass(Class<? extends T> held);
}
public abstract class Holder<T> extends BaseHolder<T> {
public String getDisplayName();
public String getInitParameter(String param);
public Enumeration<String> getInitParameterNames();
public Map<String, String> getInitParameters();
public String getName();
public void setDisplayName(String name);
public void setInitParameter(String param, String value);
public void setInitParameters(Map<String, String> map);
public void setName(String name);
public void setAsyncSupported(boolean suspendable);
public boolean isAsyncSupported();
}
public class ServletMapping {
public ServletMapping();
public ServletMapping(Source source);
public String[] getPathSpecs();
public void setPathSpecs(String[] pathSpecs);
public void setPathSpec(String pathSpec);
public String getServletName();
public void setServletName(String servletName);
public Source getSource();
}
public class Source {
public static final Source EMBEDDED = new Source(Origin.EMBEDDED, null);
public static final Source JAVAX_API = new Source(Origin.JAKARTA_API, null);
public enum Origin { EMBEDDED, JAKARTA_API, DESCRIPTOR, ANNOTATION }
public Source(Origin o, String resource);
public Origin getOrigin();
public String getResource();
}