Eclipse Jetty servlet container providing comprehensive servlet, filter, and listener integration with lifecycle management and dynamic registration support.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Eclipse 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();
}