1 //
2 // ========================================================================
3 // Copyright (c) 1995-2015 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 java.io.File;
22
23 import org.eclipse.jetty.server.Connector;
24 import org.eclipse.jetty.server.Handler;
25 import org.eclipse.jetty.server.Server;
26 import org.eclipse.jetty.server.ServerConnector;
27 import org.eclipse.jetty.server.handler.ContextHandler;
28 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
29 import org.eclipse.jetty.server.handler.ResourceHandler;
30 import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
31 import org.eclipse.jetty.util.resource.Resource;
32
33 /**
34 * A {@link ContextHandlerCollection} handler may be used to direct a request to
35 * a specific Context. The URI path prefix and optional virtual host is used to
36 * select the context.
37 */
38 public class SplitFileServer
39 {
40 public static void main( String[] args ) throws Exception
41 {
42 // Create the Server object and a corresponding ServerConnector and then
43 // set the port for the connector. In this example the server will
44 // listen on port 8090. If you set this to port 0 then when the server
45 // has been started you can called connector.getLocalPort() to
46 // programmatically get the port the server started on.
47 Server server = new Server();
48 ServerConnector connector = new ServerConnector(server);
49 connector.setPort(8090);
50 server.setConnectors(new Connector[] { connector });
51
52 // Create a Context Handler and ResourceHandler. The ContextHandler is
53 // getting set to "/" path but this could be anything you like for
54 // builing out your url. Note how we are setting the ResourceBase using
55 // our jetty maven testing utilities to get the proper resource
56 // directory, you needn't use these, you simply need to supply the paths
57 // you are looking to serve content from.
58 ContextHandler context0 = new ContextHandler();
59 context0.setContextPath("/");
60 ResourceHandler rh0 = new ResourceHandler();
61 File dir0 = MavenTestingUtils.getTestResourceDir("dir0");
62 rh0.setBaseResource(Resource.newResource(dir0));
63 context0.setHandler(rh0);
64
65 // Rinse and repeat the previous item, only specifying a different
66 // resource base.
67 ContextHandler context1 = new ContextHandler();
68 context1.setContextPath("/");
69 ResourceHandler rh1 = new ResourceHandler();
70 File dir1 = MavenTestingUtils.getTestResourceDir("dir1");
71 rh1.setBaseResource(Resource.newResource(dir1));
72 context1.setHandler(rh1);
73
74 // Create a ContextHandlerCollection and set the context handlers to it.
75 // This will let jetty process urls against the declared contexts in
76 // order to match up content.
77 ContextHandlerCollection contexts = new ContextHandlerCollection();
78 contexts.setHandlers(new Handler[] { context0, context1 });
79
80 server.setHandler(contexts);
81
82 // Start things up!
83 server.start();
84
85 // Dump the server state
86 System.out.println(server.dump());
87
88 // The use of server.join() the will make the current thread join and
89 // wait until the server is done executing.
90 // See http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()
91 server.join();
92 }
93 }