1 //
2 // ========================================================================
3 // Copyright (c) 1995-2014 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 }