View Javadoc

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  }