启动嵌入式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();