启动嵌入式Jetty服务器的最短代码

我正在编写一些示例代码,其中启动了嵌入式Jetty服务器。 服务器必须只加载一个servlet,将所有请求发送到servlet并监听localhost:80

我的代码到目前为止:

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); ServletHolder holder = new ServletHolder(new MyApp()); context.addServlet(holder, "/*"); server.start(); } catch (Exception ex) { System.err.println(ex); } } 

我可以用更少的代码/行来做同样的事情吗? (使用Jetty 6.1.0)。

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

删除了不必要的空格并内联了ServletHolder创建。 那删除了5行。

您可以在Spring applicationcontext.xml中以声明方式配置Jetty,例如:

http://roopindersingh.com/2008/12/10/spring-and-jetty-integration/

然后只需从applicationcontext.xml中检索服务器bean并调用start …我相信它会使它成为一行代码然后…… 🙂

 ((Server)appContext.getBean("jettyServer")).start(); 

它对涉及Jetty的集成测试很有用。

我编写了一个EasyJetty库,这使得嵌入Jetty变得更加容易。 它只是Jetty API上方的一层薄层,非常轻巧。

你的例子看起来像这样:

 import com.athaydes.easyjetty.EasyJetty; public class Sample { public static void main(String[] args) { new EasyJetty().port(80).servlet("/*", MyApp.class).start(); } } 

适用于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(); } } 
  Server server = new Server(8080); Context root = new Context(server, "/"); root.setResourceBase("./pom.xml"); root.setHandler(new ResourceHandler()); server.start();