I\'m writing some example code where an embedded Jetty server is started. The server must load exactly one servlet, send all requests to the servlet and listen on localhost:80
I've written a library, EasyJetty, that makes it MUCH easier to embed Jetty. It is just a thin layer above the Jetty API, really light-weight.
Your example would look like this:
import com.athaydes.easyjetty.EasyJetty;
public class Sample {
public static void main(String[] args) {
new EasyJetty().port(80).servlet("/*", MyApp.class).start();
}
}
Server server = new Server(8080);
Context root = new Context(server, "/");
root.setResourceBase("./pom.xml");
root.setHandler(new ResourceHandler());
server.start();
You could configure Jetty declaratively in a Spring applicationcontext.xml, e.g:
http://roopindersingh.com/2008/12/10/spring-and-jetty-integration/
then simply retrieve the server bean from the applicationcontext.xml and call start... I believe that makes it one line of code then... :)
((Server)appContext.getBean("jettyServer")).start();
It's useful for integration tests involving Jetty.
static void startJetty() {
try {
Server server = new Server();
Connector con = new SelectChannelConnector();
con.setPort(80);
server.addConnector(con);
Context context = new Context(server, "/", Context.SESSIONS);
context.addServlet(new ServletHolder(new MyApp()), "/*");
server.start();
} catch (Exception ex) {
System.err.println(ex);
}
}
Removed unnecessary whitespace and moved ServletHolder creation inline. That's removed 5 lines.
Works with Jetty 8:
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
WebAppContext handler = new WebAppContext();
handler.setResourceBase("/");
handler.setContextPath("/");
handler.addServlet(new ServletHolder(new MyApp()), "/*");
server.setHandler(handler);
server.start();
}
}