diff options
author | Greg Wilkins | 2013-02-22 04:49:38 +0000 |
---|---|---|
committer | Greg Wilkins | 2013-02-22 04:51:17 +0000 |
commit | c302a404cdf560f0a9d48f69d60401f61dbdecbe (patch) | |
tree | 64521bdb2dbd001aeeeb5fc8bc0d9c57d3a1cbe1 | |
parent | b2b888d18a8e2ada0c0b05361f74fb6dd9f26602 (diff) | |
download | org.eclipse.jetty.project-c302a404cdf560f0a9d48f69d60401f61dbdecbe.tar.gz org.eclipse.jetty.project-c302a404cdf560f0a9d48f69d60401f61dbdecbe.tar.xz org.eclipse.jetty.project-c302a404cdf560f0a9d48f69d60401f61dbdecbe.zip |
refined jetty embedded examples
6 files changed, 291 insertions, 106 deletions
diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java index bd01c93dc0..181e6c5c93 100644 --- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java +++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/LikeJettyXml.java @@ -21,15 +21,20 @@ package org.eclipse.jetty.embedded; import java.lang.management.ManagementFactory; import org.eclipse.jetty.deploy.DeploymentManager; +import org.eclipse.jetty.deploy.PropertiesConfigurationManager; import org.eclipse.jetty.deploy.providers.WebAppProvider; import org.eclipse.jetty.jmx.MBeanContainer; import org.eclipse.jetty.security.HashLoginService; +import org.eclipse.jetty.server.ForwardedRequestCustomizer; import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.LowResourceMonitor; import org.eclipse.jetty.server.NCSARequestLog; +import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.DefaultHandler; import org.eclipse.jetty.server.handler.HandlerCollection; @@ -46,31 +51,55 @@ public class LikeJettyXml String jetty_home = System.getProperty("jetty.home","../../jetty-distribution/target/distribution"); System.setProperty("jetty.home",jetty_home); + + // === jetty.xml === // Setup Threadpool QueuedThreadPool threadPool = new QueuedThreadPool(); threadPool.setMaxThreads(500); + // Server Server server = new Server(threadPool); - server.manage(threadPool); - server.setDumpAfterStart(false); - server.setDumpBeforeStop(false); + // Scheduler server.addBean(new TimerScheduler()); + + // HTTP Configuration + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSecureScheme("https"); + http_config.setSecurePort(8443); + http_config.setOutputBufferSize(32768); + http_config.setRequestHeaderSize(8192); + http_config.setResponseHeaderSize(8192); + http_config.setSendServerVersion(true); + http_config.setSendDateHeader(false); + // httpConfig.addCustomizer(new ForwardedRequestCustomizer()); + + // Handler Structure + HandlerCollection handlers = new HandlerCollection(); + ContextHandlerCollection contexts = new ContextHandlerCollection(); + handlers.setHandlers(new Handler[] { contexts, new DefaultHandler() }); + server.setHandler(handlers); + + // Extra options + server.setDumpAfterStart(false); + server.setDumpBeforeStop(false); + server.setStopAtShutdown(true); - // Setup JMX + + // === jetty-jmx.xml === MBeanContainer mbContainer=new MBeanContainer(ManagementFactory.getPlatformMBeanServer()); server.addBean(mbContainer); - // Setup Connectors - HttpConnectionFactory http = new HttpConnectionFactory(); - http.getHttpConfiguration().setSecurePort(8443); - http.getHttpConfiguration().setSendServerVersion(true); - ServerConnector connector = new ServerConnector(server,http); - connector.setPort(8080); - connector.setIdleTimeout(30000); - - server.addConnector(connector); + + // === jetty-http.xml === + ServerConnector http = new ServerConnector(server,new HttpConnectionFactory(http_config)); + http.setPort(8080); + http.setIdleTimeout(30000); + server.addConnector(http); + + // === jetty-https.xml === + // SSL Context Factory SslContextFactory sslContextFactory = new SslContextFactory(); sslContextFactory.setKeyStorePath(jetty_home + "/etc/keystore"); sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"); @@ -85,52 +114,75 @@ public class LikeJettyXml "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"); - ServerConnector sslConnector = new ServerConnector(server,sslContextFactory); + + // SSL HTTP Configuration + HttpConfiguration https_config = new HttpConfiguration(http_config); + https_config.addCustomizer(new SecureRequestCustomizer()); + + // SSL Connector + ServerConnector sslConnector = new ServerConnector(server, + new SslConnectionFactory(sslContextFactory,"http/1.1"), + new HttpConnectionFactory(https_config)); sslConnector.setPort(8443); server.addConnector(sslConnector); - sslConnector.open(); - - HandlerCollection handlers = new HandlerCollection(); - ContextHandlerCollection contexts = new ContextHandlerCollection(); - RequestLogHandler requestLogHandler = new RequestLogHandler(); - - handlers.setHandlers(new Handler[] { contexts, new DefaultHandler(), requestLogHandler }); - - StatisticsHandler stats = new StatisticsHandler(); - stats.setHandler(handlers); - server.setHandler(stats); - // Setup deployers + // === jetty-deploy.xml === DeploymentManager deployer = new DeploymentManager(); deployer.setContexts(contexts); - server.addBean(deployer); + deployer.setContextAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/servlet-api-[^/]*\\.jar$"); WebAppProvider webapp_provider = new WebAppProvider(); webapp_provider.setMonitoredDirName(jetty_home + "/webapps"); - webapp_provider.setParentLoaderPriority(false); + webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml"); + webapp_provider.setScanInterval(1); webapp_provider.setExtractWars(true); - webapp_provider.setScanInterval(2); - //webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml"); + webapp_provider.setConfigurationManager(new PropertiesConfigurationManager()); + deployer.addAppProvider(webapp_provider); + server.addBean(deployer); + + + // === jetty-stats.xml === + StatisticsHandler stats = new StatisticsHandler(); + stats.setHandler(server.getHandler()); + server.setHandler(stats); - HashLoginService login = new HashLoginService(); - login.setName("Test Realm"); - login.setConfig(jetty_home + "/etc/realm.properties"); - server.addBean(login); - NCSARequestLog requestLog = new NCSARequestLog(jetty_home + "/logs/jetty-yyyy_mm_dd.log"); + // === jetty-requestlog.xml === + NCSARequestLog requestLog = new NCSARequestLog(); + requestLog.setFilename(jetty_home + "/logs/jetty-yyyy_mm_dd.log"); + requestLog.setFilenameDateFormat("yyyy_MM_dd"); + requestLog.setRetainDays(90); + requestLog.setAppend(true); requestLog.setExtended(false); + requestLog.setLogCookies(false); + requestLog.setLogTimeZone("GMT"); + RequestLogHandler requestLogHandler = new RequestLogHandler(); requestLogHandler.setRequestLog(requestLog); + handlers.addHandler(requestLogHandler); - server.setStopAtShutdown(true); - + + // === jetty-lowresources.xml === LowResourceMonitor lowResourcesMonitor=new LowResourceMonitor(server); - lowResourcesMonitor.setLowResourcesIdleTimeout(1000); - lowResourcesMonitor.setMaxConnections(2); - lowResourcesMonitor.setPeriod(1200); + lowResourcesMonitor.setPeriod(1000); + lowResourcesMonitor.setLowResourcesIdleTimeout(200); + lowResourcesMonitor.setMonitorThreads(true); + lowResourcesMonitor.setMaxConnections(0); + lowResourcesMonitor.setMaxMemory(0); + lowResourcesMonitor.setMaxLowResourcesTime(5000); server.addBean(lowResourcesMonitor); + + // === test-realm.xml === + HashLoginService login = new HashLoginService(); + login.setName("Test Realm"); + login.setConfig(jetty_home + "/etc/realm.properties"); + login.setRefreshInterval(0); + server.addBean(login); + + + // Start the server server.start(); server.join(); } diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java index 259ee52579..c8b5f94c4f 100644 --- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java +++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java @@ -18,100 +18,64 @@ package org.eclipse.jetty.embedded; -import org.eclipse.jetty.io.ArrayByteBufferPool; -import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.ForwardedRequestCustomizer; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; -import org.eclipse.jetty.spdy.server.NPNServerConnectionFactory; -import org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory; -import org.eclipse.jetty.spdy.server.http.PushStrategy; -import org.eclipse.jetty.spdy.server.http.ReferrerPushStrategy; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.util.thread.QueuedThreadPool; -import org.eclipse.jetty.util.thread.TimerScheduler; /* ------------------------------------------------------------ */ /** * A Jetty server with multiple connectors. - * */ public class ManyConnectors { public static void main(String[] args) throws Exception { - String jetty_home = System.getProperty("jetty.home","../jetty-server/src/main/config"); + String jetty_home = System.getProperty("jetty.home","../../jetty-distribution/target/distribution"); System.setProperty("jetty.home", jetty_home); + // The Server Server server = new Server(); - // HTTP connector - ServerConnector connector0 = new ServerConnector(server); - connector0.setPort(8080); - connector0.setIdleTimeout(30000); + // HTTP Configuration + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSecureScheme("https"); + http_config.setSecurePort(8443); + http_config.setOutputBufferSize(32768); - // HTTPS connector + // HTTP connector + ServerConnector http = new ServerConnector(server,new HttpConnectionFactory(http_config)); + http.setPort(8080); + http.setIdleTimeout(30000); + + // SSL Context Factory for HTTPS and SPDY SslContextFactory sslContextFactory = new SslContextFactory(); sslContextFactory.setKeyStorePath(jetty_home + "/etc/keystore"); sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"); sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g"); - ServerConnector connector1 = new ServerConnector(server,sslContextFactory); - connector1.setPort(8443); - - - // A verbosely fully configured connector with SSL, SPDY and HTTP - - HttpConfiguration config = new HttpConfiguration(); - config.setSecureScheme("https"); - config.setSecurePort(8443); - config.setOutputBufferSize(32768); - config.setRequestHeaderSize(8192); - config.setResponseHeaderSize(8192); - config.addCustomizer(new ForwardedRequestCustomizer()); - config.addCustomizer(new SecureRequestCustomizer()); - - HttpConnectionFactory http = new HttpConnectionFactory(config); - http.setInputBufferSize(16384); + // HTTPS Configuration + HttpConfiguration https_config = new HttpConfiguration(http_config); + https_config.addCustomizer(new SecureRequestCustomizer()); - PushStrategy push = new ReferrerPushStrategy(); - HTTPSPDYServerConnectionFactory spdy2 = new HTTPSPDYServerConnectionFactory(2,config,push); - spdy2.setInputBufferSize(8192); - spdy2.setInitialWindowSize(32768); - - HTTPSPDYServerConnectionFactory spdy3 = new HTTPSPDYServerConnectionFactory(3,config,push); - spdy2.setInputBufferSize(8192); - - NPNServerConnectionFactory npn = new NPNServerConnectionFactory(spdy3.getProtocol(),spdy2.getProtocol(),http.getProtocol()); - npn.setDefaultProtocol(http.getProtocol()); - npn.setInputBufferSize(1024); - - SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory,npn.getProtocol()); - - QueuedThreadPool threadPool = new QueuedThreadPool(); - threadPool.setMaxThreads(256); - TimerScheduler scheduler = new TimerScheduler(); - ByteBufferPool bufferPool= new ArrayByteBufferPool(32,4096,32768); - - ServerConnector connector2 = new ServerConnector(server,threadPool,scheduler,bufferPool,2,2,ssl,npn,spdy3,spdy2,http); - connector2.setDefaultProtocol("ssl-npn"); - connector2.setPort(8444); - connector2.setIdleTimeout(30000); - connector2.setSoLingerTime(10000); + // HTTPS connector + ServerConnector https = new ServerConnector(server, + new SslConnectionFactory(sslContextFactory,"http/1.1"), + new HttpConnectionFactory(https_config)); + https.setPort(8443); // Set the connectors - server.setConnectors(new Connector[] { connector0, connector1, connector2 }); - + server.setConnectors(new Connector[] { http, https }); + // Set a handler server.setHandler(new HelloHandler()); + // Start the server server.start(); - server.dumpStdErr(); server.join(); } } diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java new file mode 100644 index 0000000000..cab95a6966 --- /dev/null +++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java @@ -0,0 +1,57 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.embedded; + +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; +import org.eclipse.jetty.util.ssl.SslContextFactory; + +/* ------------------------------------------------------------ */ +/** + * A Jetty server with one connectors. + */ +public class OneConnector +{ + public static void main(String[] args) throws Exception + { + // The Server + Server server = new Server(); + + // HTTP connector + ServerConnector http = new ServerConnector(server); + http.setHost("localhost"); + http.setPort(8080); + http.setIdleTimeout(30000); + + // Set the connectors + server.setConnectors(new Connector[] { http }); + + // Set a handler + server.setHandler(new HelloHandler()); + + // Start the server + server.start(); + server.join(); + } +} diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyConnector.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyConnector.java new file mode 100644 index 0000000000..0cb8e2b70e --- /dev/null +++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyConnector.java @@ -0,0 +1,94 @@ +// +// ======================================================================== +// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.embedded; + +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; +import org.eclipse.jetty.spdy.server.NPNServerConnectionFactory; +import org.eclipse.jetty.spdy.server.SPDYServerConnectionFactory; +import org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory; +import org.eclipse.jetty.spdy.server.http.ReferrerPushStrategy; +import org.eclipse.jetty.util.ssl.SslContextFactory; + +/* ------------------------------------------------------------ */ +/** + * A Jetty server with HTTP and SPDY connectors. + */ +public class SpdyConnector +{ + public static void main(String[] args) throws Exception + { + String jetty_home = System.getProperty("jetty.home","../../jetty-distribution/target/distribution"); + System.setProperty("jetty.home", jetty_home); + + // The Server + Server server = new Server(); + + // HTTP Configuration + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSecureScheme("https"); + http_config.setSecurePort(8443); + + // HTTP connector + ServerConnector http = new ServerConnector(server,new HttpConnectionFactory(http_config)); + http.setPort(8080); + server.addConnector(http); + + // SSL Context Factory for HTTPS and SPDY + SslContextFactory sslContextFactory = new SslContextFactory(); + sslContextFactory.setKeyStorePath(jetty_home + "/etc/keystore"); + sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"); + sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g"); + + // HTTPS Configuration + HttpConfiguration https_config = new HttpConfiguration(http_config); + https_config.addCustomizer(new SecureRequestCustomizer()); + + // SPDY versions + HTTPSPDYServerConnectionFactory spdy2 = + new HTTPSPDYServerConnectionFactory(2,https_config); + + HTTPSPDYServerConnectionFactory spdy3 = + new HTTPSPDYServerConnectionFactory(3,https_config,new ReferrerPushStrategy()); + + // NPN Factory + SPDYServerConnectionFactory.checkNPNAvailable(); + NPNServerConnectionFactory npn = new NPNServerConnectionFactory(spdy3.getProtocol(),spdy2.getProtocol(),http.getDefaultProtocol()); + npn.setDefaultProtocol(http.getDefaultProtocol()); + + // SSL Factory + SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory,npn.getProtocol()); + + // SPDY Connector + ServerConnector spdyConnector = new ServerConnector(server,ssl,npn,spdy3,spdy2,http.getDefaultConnectionFactory()); + spdyConnector.setPort(8443); + server.addConnector(spdyConnector); + + // Set a handler + server.setHandler(new HelloHandler()); + + // Start the server + server.start(); + server.join(); + } +} diff --git a/jetty-server/src/main/config/etc/jetty-https.xml b/jetty-server/src/main/config/etc/jetty-https.xml index 82a57d608d..a4aad5940d 100644 --- a/jetty-server/src/main/config/etc/jetty-https.xml +++ b/jetty-server/src/main/config/etc/jetty-https.xml @@ -24,6 +24,17 @@ <Set name="KeyManagerPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set> <Set name="TrustStorePath"><Property name="jetty.home" default="." />/etc/keystore</Set> <Set name="TrustStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set> + <Set name="ExcludedCipherSuites"> + <Array type="String"> + <Item>SSL_RSA_WITH_DES_CBC_SHA</Item> + <Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item> + <Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item> + <Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item> + <Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item> + <Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item> + <Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item> + </Array> + </Set> </New> <!-- =========================================================== --> @@ -32,7 +43,7 @@ <!-- Add a SecureRequestCustomizer to extract certificate and --> <!-- session information --> <!-- =========================================================== --> - <New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> + <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> <Arg><Ref refid="httpConfig"/></Arg> <Call name="addCustomizer"> <Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg> @@ -65,7 +76,7 @@ </Item> <Item> <New class="org.eclipse.jetty.server.HttpConnectionFactory"> - <Arg name="config"><Ref refid="tlsHttpConfig"/></Arg> + <Arg name="config"><Ref refid="sslHttpConfig"/></Arg> </New> </Item> </Array> diff --git a/jetty-server/src/main/config/etc/jetty.xml b/jetty-server/src/main/config/etc/jetty.xml index 477ba55746..8a4c695323 100644 --- a/jetty-server/src/main/config/etc/jetty.xml +++ b/jetty-server/src/main/config/etc/jetty.xml @@ -49,6 +49,15 @@ <Set name="detailedDump">false</Set> </New> </Arg> + + <!-- =========================================================== --> + <!-- Add shared Scheduler instance --> + <!-- =========================================================== --> + <Call name="addBean"> + <Arg> + <New class="org.eclipse.jetty.util.thread.TimerScheduler.TimerScheduler"/> + </Arg> + </Call> <!-- =========================================================== --> <!-- Http Configuration. --> @@ -71,10 +80,8 @@ <Set name="outputBufferSize">32768</Set> <Set name="requestHeaderSize">8192</Set> <Set name="responseHeaderSize">8192</Set> - - <!-- Uncomment to not send the server version as a header - <Set name="sendServerVersion">false</Set> - --> + <Set name="sendServerVersion">true</Set> + <Set name="sendDateHeader">false</Set> <!-- Uncomment to enable handling of X-Forwarded- style headers <Call name="addCustomizer"> |