Use a org.eclipse.jetty.webapp.WebAppContext
例:
package jetty;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class OnWebApp
{
public static void main(String[] args) throws Exception
{
// Create a basic jetty server object that will listen on port 8080.
// Note that if you set this to port 0 then a randomly available port
// will be assigned that you can either look in the logs for the port,
// or programmatically obtain it for use in test cases.
Server server = new Server(8080);
// The WebAppContext is the entity that controls the environment in
// which a web application lives and breathes. In this example the
// context path is being set to "/" so it is suitable for serving
// root context requests and then we see it setting the location of
// the war. A whole host of other configurations are available,
// ranging from configuring to support annotation scanning in the
// webapp (through PlusConfiguration) to choosing where the webapp
// will unpack itself.
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar("path/to/my/test.war");
// A WebAppContext is a ContextHandler as well so it needs to be set to
// the server so it is aware of where to send the appropriate requests.
server.setHandler(webapp);
// Start things up! By using the server.join() the server thread will
// join with the current thread.
// See http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join()
// for more details.
server.start();
server.join();
}
}
请注意,您将构建一个普通的 WAR 文件,并将其与 Jetty 一起使用。
如果您有特殊要求,例如注释扫描或JNDI,那么您需要进入配置规范。
// Enable parsing of jndi-related parts of web.xml and jetty-env.xml
org.eclipse.jetty.webapp.Configuration.ClassList classlist =
org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);
// Enable JNDI
classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
// Enable Annotation Scanning
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
"org.eclipse.jetty.annotations.AnnotationConfiguration");
有关 WebAppContext 中更详细的示例,请参阅 ServerWithAnnotations 示例。
另请注意,使用此技术,您还将拥有所有 webapp 类装入器规则。这意味着您将有一个用于web应用程序的类加载器和另一个用于服务器的类加载器。理解这一点很重要。
您可以对类装入器的WebAppContext进行一些调整,但您无法消除它们,只能控制它们的行为方式。
WebAppContext webapp = new WebAppContext();
// ... various setup of the webapp ...
// Flip the classloader priority from servlet spec where webapp is first to
// Standard java behavior of parent (aka Server classloader) is first.
webapp.setParentLoaderPriority(true);
另请参阅: