启动嵌入式Jetty服务器的最短代码
问题描述:
我正在编写一些嵌入式Jetty服务器启动的示例代码。服务器必须加载只有一个servlet中,发送到servlet的所有请求,并听取在localhost:80启动嵌入式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);
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配置码头,如:
http://roopindersingh.com/2008/12/10/spring-and-jetty-integration/
然后简单地检索来自applicationContext.xml中的服务器豆和呼叫开始......我相信,它使一个行代码,然后... :)
((Server)appContext.getBean("jettyServer")).start();
它涉及码头集成测试非常有用。
答
工程与码头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();
答
我写了一个库,EasyJetty,这使得它更容易嵌入码头。它只是Jetty API上方的一个薄层,非常轻便。
你的榜样应该是这样的:
import com.athaydes.easyjetty.EasyJetty;
public class Sample {
public static void main(String[] args) {
new EasyJetty().port(80).servlet("/*", MyApp.class).start();
}
}