将Jetty作为Servlet容器嵌入

我正在使用Tomcat来服务我的Java Servlets,这对我来说更有用。 我只需要服务,单独的Servlet请求,没有静态内容,也不需要JSP等。所以我一直在寻找可以嵌入我的应用程序的Servlet容器。 我觉得如果剥离Jetty并单独使用它作为Servlet容器,它可以更具可扩展性并占用很小的内存,[我不需要Jetty的’Web Server’和其他部件]。 所以我有几个问题,

  1. 如何在我的应用程序代码中嵌入Jetty以单独提供Servlet请求?
  2. 如果我在我的应用程序代码中嵌入Jetty代码,我是否可以轻松升级Jetty版本?
  3. 我在这里得到了Jetty代码,如果我必须在我的应用程序中嵌入Jetty的Servlet容器,我应该从源代码中使用它, http://git.eclipse.org/c/jetty/org.eclipse.jetty.project。 git / snapshot / jetty-9.0.3.v20130506.tar.bz2 ,jetty-9.0.3.v20130506 / jetty-servlet或jetty-9.0.3.v20130506 / jetty-servlets

我打算用我的应用程序提供API请求,我正在寻找性能和可伸缩性作为主要约束。 当然还有Servlet 3.0支持。

您正在寻找的是在嵌入式场景中运行Jetty。

有很多例子可以展示如何将实现目标所需的各个部分联系在一起。

查看jetty源树中的嵌入示例 。

为了记录,jetty standalone实际上只是一个嵌入了一些启动和类路径相关引导的jetty。 它是相同的代码,并以基本相同的方式组装。

既然你说你想要Servlet 3.0,对JSP没兴趣,这很容易设置。 (JSP设置起来比较棘手,但可能)。

对于servlet 3.0特定的嵌入,在github上有一个完整的示例项目。

https://github.com/jetty-project/embedded-servlet-3.0

简而言之,您将拥有以下初始化代码。

package com.company.foo; import org.eclipse.jetty.annotations.AnnotationConfiguration; import org.eclipse.jetty.plus.webapp.EnvConfiguration; import org.eclipse.jetty.plus.webapp.PlusConfiguration; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.Configuration; import org.eclipse.jetty.webapp.FragmentConfiguration; import org.eclipse.jetty.webapp.MetaInfConfiguration; import org.eclipse.jetty.webapp.TagLibConfiguration; import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.webapp.WebInfConfiguration; import org.eclipse.jetty.webapp.WebXmlConfiguration; public class EmbedMe { public static void main(String[] args) throws Exception { int port = 8080; Server server = new Server(port); String wardir = "target/sample-webapp-1-SNAPSHOT"; WebAppContext context = new WebAppContext(); // This can be your own project's jar file, but the contents should // conform to the WAR layout. context.setResourceBase(wardir); // A WEB-INF/web.xml is required for Servlet 3.0 context.setDescriptor(wardir + "WEB-INF/web.xml"); // Initialize the various configurations required to auto-wire up // the Servlet 3.0 annotations, descriptors, and fragments context.setConfigurations(new Configuration[] { new AnnotationConfiguration(), new WebXmlConfiguration(), new WebInfConfiguration(), new TagLibConfiguration(), new PlusConfiguration(), new MetaInfConfiguration(), new FragmentConfiguration(), new EnvConfiguration() }); // Specify the context path that you want this webapp to show up as context.setContextPath("/"); // Tell the classloader to use the "server" classpath over the // webapp classpath. (this is so that jars and libs in your // server classpath are used, requiring no WEB-INF/lib // directory to exist) context.setParentLoaderPriority(true); // Add this webapp to the server server.setHandler(context); // Start the server thread server.start(); // Wait for the server thread to stop (optional) server.join(); } }