1 // 2 // ======================================================================== 3 // Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // All rights reserved. This program and the accompanying materials 6 // are made available under the terms of the Eclipse Public License v1.0 7 // and Apache License v2.0 which accompanies this distribution. 8 // 9 // The Eclipse Public License is available at 10 // http://www.eclipse.org/legal/epl-v10.html 11 // 12 // The Apache License v2.0 is available at 13 // http://www.opensource.org/licenses/apache2.0.php 14 // 15 // You may elect to redistribute this code under either of these licenses. 16 // ======================================================================== 17 // 18 19 package org.eclipse.jetty.embedded; 20 21 import org.eclipse.jetty.server.Connector; 22 import org.eclipse.jetty.server.Handler; 23 import org.eclipse.jetty.server.Server; 24 import org.eclipse.jetty.server.ServerConnector; 25 import org.eclipse.jetty.server.handler.ContextHandler; 26 import org.eclipse.jetty.server.handler.ContextHandlerCollection; 27 import org.eclipse.jetty.server.handler.ResourceHandler; 28 import org.eclipse.jetty.toolchain.test.MavenTestingUtils; 29 import org.eclipse.jetty.util.resource.Resource; 30 31 /* ------------------------------------------------------------ */ 32 /** 33 * A {@link ContextHandlerCollection} handler may be used to direct a request to 34 * a specific Context. The URI path prefix and optional virtual host is used to 35 * select the context. 36 * 37 */ 38 public class SplitFileServer 39 { 40 41 public static void main(String[] args) throws Exception 42 { 43 // Create the Server object and a corresponding ServerConnector and then set the port for the connector. In 44 // this example the server will listen on port 8090. If you set this to port 0 then when the server has been 45 // started you can called connector.getLocalPort() to programmatically get the port the server started on. 46 Server server = new Server(); 47 ServerConnector connector = new ServerConnector(server); 48 connector.setPort(8090); 49 server.setConnectors(new Connector[] 50 { connector }); 51 52 // Create a Context Handler and ResourceHandler. The ContextHandler is getting set to "/" path but this could 53 // be anything you like for builing out your url. Note how we are setting the ResourceBase using our jetty 54 // maven testing utilities to get the proper resource directory, you needn't use these, 55 // you simply need to supply the paths you are looking to serve content from. 56 ContextHandler context0 = new ContextHandler(); 57 context0.setContextPath("/"); 58 ResourceHandler rh0 = new ResourceHandler(); 59 rh0.setBaseResource( Resource.newResource(MavenTestingUtils.getTestResourceDir("dir0"))); 60 context0.setHandler(rh0); 61 62 // Rinse and repeat the previous item, only specifying a different resource base. 63 ContextHandler context1 = new ContextHandler(); 64 context1.setContextPath("/"); 65 ResourceHandler rh1 = new ResourceHandler(); 66 rh1.setBaseResource( Resource.newResource(MavenTestingUtils.getTestResourceDir("dir1"))); 67 context1.setHandler(rh1); 68 69 // Create a ContextHandlerCollection and set the context handlers to it. This will let jetty process urls 70 // against the declared contexts in order to match up content. 71 ContextHandlerCollection contexts = new ContextHandlerCollection(); 72 contexts.setHandlers(new Handler[] 73 { context0, context1 }); 74 75 server.setHandler(contexts); 76 77 // Start things up! By using the server.join() the server thread will join with the current thread. 78 // See "http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join()" for more details. 79 server.start(); 80 System.err.println(server.dump()); 81 server.join(); 82 } 83 }