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.HttpConfiguration; 23 import org.eclipse.jetty.server.HttpConnectionFactory; 24 import org.eclipse.jetty.server.SecureRequestCustomizer; 25 import org.eclipse.jetty.server.Server; 26 import org.eclipse.jetty.server.ServerConnector; 27 import org.eclipse.jetty.server.SslConnectionFactory; 28 import org.eclipse.jetty.util.ssl.SslContextFactory; 29 30 /* ------------------------------------------------------------ */ 31 /** 32 * A Jetty server with multiple connectors. 33 */ 34 public class ManyConnectors 35 { 36 public static void main(String[] args) throws Exception 37 { 38 // Since this example shows off SSL configuration, we need a keystore with the appropriate key. These two 39 // lines are purely a hack to get access to a keystore that we use in many unit tests and should probably be 40 // a direct path to your own keystore (used on line 29). 41 String jetty_home = System.getProperty("jetty.home","../../jetty-distribution/target/distribution"); 42 System.setProperty("jetty.home", jetty_home); 43 44 // Create a basic jetty server object without declaring the port. Since we are configuring connectors 45 // directly we'll be setting ports on those connectors. 46 Server server = new Server(); 47 48 // HTTP Configuration 49 // HttpConfiguration is a collection of configuration information appropriate for http and https. The default 50 // scheme for http is <code>http</code> of course, as the default for secured http is <code>https</code> but 51 // we show setting the scheme to show it can be done. The port for secured communication is also set here. 52 HttpConfiguration http_config = new HttpConfiguration(); 53 http_config.setSecureScheme("https"); 54 http_config.setSecurePort(8443); 55 http_config.setOutputBufferSize(32768); 56 57 // HTTP connector 58 // The first server connector we create is the one for http, passing in the http configuration we configured 59 // above so it can get things like the output buffer size, etc. We also set the port (8080) and configure an 60 // idle timeout. 61 ServerConnector http = new ServerConnector(server,new HttpConnectionFactory(http_config)); 62 http.setPort(8080); 63 http.setIdleTimeout(30000); 64 65 // SSL Context Factory for HTTPS and SPDY 66 // SSL requires a certificate so we configure a factory for ssl contents with information pointing to what 67 // keystore the ssl connection needs to know about. Much more configuration is available the ssl context, 68 // including things like choosing the particular certificate out of a keystore to be used. 69 SslContextFactory sslContextFactory = new SslContextFactory(); 70 sslContextFactory.setKeyStorePath(jetty_home + "/etc/keystore"); 71 sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"); 72 sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g"); 73 74 // HTTPS Configuration 75 // A new HttpConfiguration object is needed for the next connector and you can pass the old one as an 76 // argument to effectively clone the contents. On this HttpConfiguration object we add a 77 // SecureRequestCustomizer which is how a new connector is able to resolve the https connection before 78 // handing control over to the Jetty Server. 79 HttpConfiguration https_config = new HttpConfiguration(http_config); 80 https_config.addCustomizer(new SecureRequestCustomizer()); 81 82 // HTTPS connector 83 // We create a second ServerConnector, passing in the http configuration we just made along with the 84 // previously created ssl context factory. Next we set the port and a longer idle timeout. 85 ServerConnector https = new ServerConnector(server, 86 new SslConnectionFactory(sslContextFactory,"http/1.1"), 87 new HttpConnectionFactory(https_config)); 88 https.setPort(8443); 89 https.setIdleTimeout(500000); 90 91 // Here you see the server having multiple connectors registered with it, now requests can flow into the server 92 // from both http and https urls to their respective ports and be processed accordingly by jetty. A simple 93 // handler is also registered with the server so the example has something to pass requests off to. 94 95 // Set the connectors 96 server.setConnectors(new Connector[] { http, https }); 97 98 // Set a handler 99 server.setHandler(new HelloHandler()); 100 101 // Start the server 102 server.start(); 103 server.join(); 104 } 105 }