Merge branch 'master' into release-9
diff --git a/examples/embedded/src/main/java/HelloWorld.java b/examples/embedded/src/main/java/HelloWorld.java
new file mode 100644
index 0000000..2806fc3
--- /dev/null
+++ b/examples/embedded/src/main/java/HelloWorld.java
@@ -0,0 +1,50 @@
+//
+// ========================================================================
+// 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.
+// ========================================================================
+//
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import java.io.IOException;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+
+public class HelloWorld extends AbstractHandler
+{
+ @Override
+ public void handle(String target,
+ Request baseRequest,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ response.setContentType("text/html;charset=utf-8");
+ response.setStatus(HttpServletResponse.SC_OK);
+ baseRequest.setHandled(true);
+ response.getWriter().println("<h1>Hello World</h1>");
+ }
+
+ public static void main(String[] args) throws Exception
+ {
+ Server server = new Server(8080);
+ server.setHandler(new HelloWorld());
+
+ server.start();
+ server.join();
+ }
+}
diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java
index 3911a86..c77ac42 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/FileServer.java
@@ -29,29 +29,18 @@
/* ------------------------------------------------------------ */
/** Simple Jetty FileServer.
* This is a simple example of Jetty configured as a FileServer.
- *
- * File server Usage - java org.eclipse.jetty.server.example.FileServer [ port [
- * docroot ]]
- *
- * @see FileServerXml for the equivalent example done in XML configuration.
- * @author gregw
- *
*/
public class FileServer
{
- private static final Logger LOG = Log.getLogger(FileServer.class);
-
public static void main(String[] args) throws Exception
{
- Server server = new Server(args.length == 0?8080:Integer.parseInt(args[0]));
+ Server server = new Server(8080);
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
-
- resource_handler.setResourceBase(args.length == 2?args[1]:".");
- LOG.info("serving " + resource_handler.getBaseResource());
-
+ resource_handler.setResourceBase(".");
+
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
server.setHandler(handlers);
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 bd01c93..181e6c5 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 @@
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 @@
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);
+
+ // 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.addBean(new TimerScheduler());
+ 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);
+
+ // === jetty-http.xml ===
+ ServerConnector http = new ServerConnector(server,new HttpConnectionFactory(http_config));
+ http.setPort(8080);
+ http.setIdleTimeout(30000);
+ server.addConnector(http);
- server.addConnector(connector);
-
+
+ // === jetty-https.xml ===
+ // SSL Context Factory
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(jetty_home + "/etc/keystore");
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
@@ -85,52 +114,75 @@
"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");
- deployer.addAppProvider(webapp_provider);
+ 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);
+
+
+ // === 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);
+
+
+ // === jetty-lowresources.xml ===
+ LowResourceMonitor lowResourcesMonitor=new LowResourceMonitor(server);
+ 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);
- NCSARequestLog requestLog = new NCSARequestLog(jetty_home + "/logs/jetty-yyyy_mm_dd.log");
- requestLog.setExtended(false);
- requestLogHandler.setRequestLog(requestLog);
- server.setStopAtShutdown(true);
-
- LowResourceMonitor lowResourcesMonitor=new LowResourceMonitor(server);
- lowResourcesMonitor.setLowResourcesIdleTimeout(1000);
- lowResourcesMonitor.setMaxConnections(2);
- lowResourcesMonitor.setPeriod(1200);
- server.addBean(lowResourcesMonitor);
-
+ // 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 259ee52..c8b5f94 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);
+ // HTTPS Configuration
+ HttpConfiguration https_config = new HttpConfiguration(http_config);
+ https_config.addCustomizer(new SecureRequestCustomizer());
-
- // 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);
-
- 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/ManyContexts.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java
index 5c39667..80176ef 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyContexts.java
@@ -18,60 +18,37 @@
package org.eclipse.jetty.embedded;
-import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
-/* ------------------------------------------------------------ */
-/**
- * A {@link ContextHandlerCollection} handler may be used to direct a request to
- * a specific Context. The URI path prefix and optional virtual host is used to
- * select the context.
- *
- */
public class ManyContexts
{
- public final static String BODY=
- "<a href='/'>root context</a><br/>"+
- "<a href='http://127.0.0.1:8080/context'>normal context</a><br/>"+
- "<a href='http://127.0.0.2:8080/context'>virtual context</a><br/>";
-
public static void main(String[] args) throws Exception
{
- Server server = new Server();
- ServerConnector connector = new ServerConnector(server);
- connector.setPort(8080);
- server.setConnectors(new Connector[]
- { connector });
+ Server server = new Server(8080);
- ContextHandler context0 = new ContextHandler();
- context0.setContextPath("/");
- Handler handler0 = new HelloHandler("Root Context",BODY);
- context0.setHandler(handler0);
+ ContextHandler context = new ContextHandler("/");
+ context.setContextPath("/");
+ context.setHandler(new HelloHandler("Root Hello"));
- ContextHandler context1 = new ContextHandler();
- context1.setContextPath("/context");
- Handler handler1 = new HelloHandler("A Context",BODY);
- context1.setHandler(handler1);
+ ContextHandler contextFR = new ContextHandler("/fr");
+ contextFR.setHandler(new HelloHandler("Bonjoir"));
+
+ ContextHandler contextIT = new ContextHandler("/it");
+ contextIT.setHandler(new HelloHandler("Bongiorno"));
- ContextHandler context2 = new ContextHandler();
- context2.setContextPath("/context");
- context2.setVirtualHosts(new String[]
- { "127.0.0.2" });
- Handler handler2 = new HelloHandler("A Virtual Context",BODY);
- context2.setHandler(handler2);
+ ContextHandler contextV = new ContextHandler("/");
+ contextV.setVirtualHosts(new String[]{ "127.0.0.2" });
+ contextV.setHandler(new HelloHandler("Virtual Hello"));
ContextHandlerCollection contexts = new ContextHandlerCollection();
- contexts.setHandlers(new Handler[]
- { context0, context1, context2 });
+ contexts.setHandlers(new Handler[] { context, contextFR, contextIT, contextV });
server.setHandler(contexts);
server.start();
- System.err.println(server.dump());
server.join();
}
}
diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java
index bb2ff17..5d371e2 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java
@@ -36,12 +36,12 @@
ServletHandler handler = new ServletHandler();
server.setHandler(handler);
- handler.addServletWithMapping("org.eclipse.jetty.embedded.MinimalServlets$HelloServlet","/");
+ handler.addServletWithMapping(HelloServlet.class,"/*");
server.start();
server.join();
}
-
+
public static class HelloServlet extends HttpServlet
{
@Override
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 0000000..0459c43
--- /dev/null
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneConnector.java
@@ -0,0 +1,51 @@
+//
+// ========================================================================
+// 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.Server;
+import org.eclipse.jetty.server.ServerConnector;
+
+/* ------------------------------------------------------------ */
+/**
+ * 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 connector
+ server.addConnector(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/OneServletContext.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java
index 8305e6b..3e91ec4 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java
@@ -37,10 +37,8 @@
holder.setInitParameter("resourceBase","/tmp");
holder.setInitParameter("pathInfoOnly","true");
- // Serve some hello world servlets
- context.addServlet(new ServletHolder(new HelloServlet()),"/*");
- context.addServlet(new ServletHolder(new HelloServlet("Buongiorno Mondo")),"/it/*");
- context.addServlet(new ServletHolder(new HelloServlet("Bonjour le Monde")),"/fr/*");
+ // A Dump Servlet
+ context.addServlet(new ServletHolder(new DumpServlet()),"/*");
server.start();
server.join();
diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java
index 281ec11..87a1a66 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/OneWebApp.java
@@ -18,6 +18,7 @@
package org.eclipse.jetty.embedded;
+import org.eclipse.jetty.security.HashLoginService;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
@@ -27,36 +28,18 @@
{
public static void main(String[] args) throws Exception
{
- Server server = new Server();
-
- ServerConnector connector = new ServerConnector(server);
- connector.setPort(Integer.getInteger("jetty.port",8080).intValue());
- server.setConnectors(new Connector[]
- { connector });
-
-
- //If you're running this from inside Eclipse, then Server.getVersion will not provide
- //the correct number as there is no manifest. Use the command line instead to provide the path to the
- //test webapp
- String war = args.length > 0?args[0]: "../test-jetty-webapp/target/test-jetty-webapp-"+Server.getVersion();
- String path = args.length > 1?args[1]:"/";
-
- System.err.println(war + " " + path);
+ Server server = new Server(8080);
WebAppContext webapp = new WebAppContext();
- webapp.setContextPath(path);
- webapp.setWar(war);
-
- //If the webapp contains security constraints, you will need to configure a LoginService
- if (war.contains("test-jetty-webapp"))
- {
- org.eclipse.jetty.security.HashLoginService loginService = new org.eclipse.jetty.security.HashLoginService();
- loginService.setName("Test Realm");
- loginService.setConfig("src/test/resources/realm.properties");
- webapp.getSecurityHandler().setLoginService(loginService);
- }
-
+ webapp.setContextPath("/");
+ webapp.setWar("../../tests/test-webapps/test-jetty-webapp/target/test-jetty-webapp-9.0.0-SNAPSHOT.war");
server.setHandler(webapp);
+
+ // Configure a LoginService
+ HashLoginService loginService = new HashLoginService();
+ loginService.setName("Test Realm");
+ loginService.setConfig("src/test/resources/realm.properties");
+ server.addBean(loginService);
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 0000000..8b1ffba
--- /dev/null
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyConnector.java
@@ -0,0 +1,96 @@
+//
+// ========================================================================
+// 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,new HttpConnectionFactory(https_config));
+ spdyConnector.setPort(8443);
+ server.addConnector(spdyConnector);
+
+ // 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/SpdyServer.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyServer.java
index e9d12cb..8171a94 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyServer.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/SpdyServer.java
@@ -81,8 +81,6 @@
httpConnector.setPort(8080);
httpConnector.setIdleTimeout(10000);
server.addConnector(httpConnector);
-
-
// SSL configurations
SslContextFactory sslContextFactory = new SslContextFactory();
@@ -99,8 +97,6 @@
"SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
"SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA");
-
-
// Spdy Connector
diff --git a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/AnnotationParser.java b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/AnnotationParser.java
index fa0fd89..f49c07e 100644
--- a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/AnnotationParser.java
+++ b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/AnnotationParser.java
@@ -25,8 +25,10 @@
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.Locale;
+import java.util.Set;
import java.util.jar.JarEntry;
import org.eclipse.jetty.util.Loader;
@@ -50,7 +52,7 @@
{
private static final Logger LOG = Log.getLogger(AnnotationParser.class);
- protected List<String> _parsedClassNames = new ArrayList<String>();
+ protected Set<String> _parsedClassNames = new HashSet<String>();
protected List<Handler> _handlers = new ArrayList<Handler>();
public static String normalize (String name)
diff --git a/jetty-server/src/main/config/etc/jetty-https.xml b/jetty-server/src/main/config/etc/jetty-https.xml
index 82a57d6..a4aad59 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 477ba55..8a4c695 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">
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java
index b14306a..cd55b95 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java
@@ -25,6 +25,13 @@
import org.eclipse.jetty.io.EndPoint;
import org.eclipse.jetty.util.annotation.Name;
+
+/* ------------------------------------------------------------ */
+/** A Connection Factory for HTTP Connections.
+ * <p>Accepts connections either directly or via SSL and/or NPN chained connection factories. The accepted
+ * {@link HttpConnection}s are configured by a {@link HttpConfiguration} instance that is either created by
+ * default or passed in to the constructor.
+ */
public class HttpConnectionFactory extends AbstractConnectionFactory implements HttpConfiguration.ConnectionFactory
{
private final HttpConfiguration _config;
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java
index 6ee3014..79a5d8f 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/resource/JarFileResource.java
@@ -65,19 +65,23 @@
_list=null;
_entry=null;
_file=null;
-
- if ( _jarFile != null )
+ //if the jvm is not doing url caching, then the JarFiles will not be cached either,
+ //and so they are safe to close
+ if (!getUseCaches())
{
- try
+ if ( _jarFile != null )
{
- _jarFile.close();
- }
- catch ( IOException ioe )
- {
- LOG.ignore(ioe);
+ try
+ {
+ LOG.debug("Closing JarFile "+_jarFile.getName());
+ _jarFile.close();
+ }
+ catch ( IOException ioe )
+ {
+ LOG.ignore(ioe);
+ }
}
}
-
_jarFile=null;
super.release();
}
diff --git a/jetty-util/src/test/resources/TestData/test/META-INF/MANIFEST.MF b/jetty-util/src/test/resources/TestData/test/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..b1f9510
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Created-By: 1.2.2 (Sun Microsystems Inc.)
+
diff --git a/jetty-util/src/test/resources/TestData/test/alphabet b/jetty-util/src/test/resources/TestData/test/alphabet
new file mode 100755
index 0000000..72d007b
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/alphabet
@@ -0,0 +1 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
diff --git a/jetty-util/src/test/resources/TestData/test/numbers b/jetty-util/src/test/resources/TestData/test/numbers
new file mode 100755
index 0000000..a32a434
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/numbers
@@ -0,0 +1 @@
+1234567890
diff --git a/jetty-util/src/test/resources/TestData/test/subdir/alphabet b/jetty-util/src/test/resources/TestData/test/subdir/alphabet
new file mode 100755
index 0000000..72d007b
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/subdir/alphabet
@@ -0,0 +1 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
diff --git a/jetty-util/src/test/resources/TestData/test/subdir/numbers b/jetty-util/src/test/resources/TestData/test/subdir/numbers
new file mode 100755
index 0000000..a32a434
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/subdir/numbers
@@ -0,0 +1 @@
+1234567890
diff --git a/jetty-util/src/test/resources/TestData/test/subdir/subsubdir/alphabet b/jetty-util/src/test/resources/TestData/test/subdir/subsubdir/alphabet
new file mode 100755
index 0000000..72d007b
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/subdir/subsubdir/alphabet
@@ -0,0 +1 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZ
diff --git a/jetty-util/src/test/resources/TestData/test/subdir/subsubdir/numbers b/jetty-util/src/test/resources/TestData/test/subdir/subsubdir/numbers
new file mode 100755
index 0000000..a32a434
--- /dev/null
+++ b/jetty-util/src/test/resources/TestData/test/subdir/subsubdir/numbers
@@ -0,0 +1 @@
+1234567890
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java
index 8303f16..8318787 100644
--- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java
+++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/WebAppContext.java
@@ -116,6 +116,7 @@
"org.eclipse.jetty.jndi.", // webapp cannot change naming classes
"org.eclipse.jetty.jaas.", // webapp cannot change jaas classes
"org.eclipse.jetty.websocket.", // WebSocket is a jetty extension
+ "org.eclipse.jetty.websocket.WebSocketServlet", // webapp cannot change WebSocketServlet
"org.eclipse.jetty.servlet.DefaultServlet" // webapp cannot change default servlets
} ;
@@ -129,6 +130,7 @@
"-org.eclipse.jetty.jndi.", // don't hide naming classes
"-org.eclipse.jetty.jaas.", // don't hide jaas classes
"-org.eclipse.jetty.servlets.", // don't hide jetty servlets
+ "-org.eclipse.jetty.websocket.WebSocketServlet", // don't hide WebSocketServlet
"-org.eclipse.jetty.servlet.DefaultServlet", // don't hide default servlet
"-org.eclipse.jetty.servlet.listener.", // don't hide useful listeners
"-org.eclipse.jetty.websocket.", //not a serverclass, is a systemclass
diff --git a/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/WebSocketMinVersionTest.java b/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/WebSocketMinVersionTest.java
new file mode 100644
index 0000000..5fb4713
--- /dev/null
+++ b/jetty-websocket/src/test/java/org/eclipse/jetty/websocket/WebSocketMinVersionTest.java
@@ -0,0 +1,119 @@
+//
+// ========================================================================
+// 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.websocket;
+
+import static org.hamcrest.Matchers.*;
+
+import java.net.URI;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.websocket.helper.CaptureSocket;
+import org.eclipse.jetty.websocket.helper.SafariD00;
+import org.eclipse.jetty.websocket.helper.WebSocketCaptureServlet;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class WebSocketMinVersionTest
+{
+ private Server server;
+ private WebSocketCaptureServlet servlet;
+ private URI serverUri;
+
+ @BeforeClass
+ public static void initLogging()
+ {
+ // Configure Logging
+ // System.setProperty("org.eclipse.jetty.util.log.class",StdErrLog.class.getName());
+ System.setProperty("org.eclipse.jetty.websocket.helper.LEVEL","DEBUG");
+ }
+
+ @Before
+ public void startServer() throws Exception
+ {
+ // Configure Server
+ server = new Server(0);
+
+ ServletContextHandler context = new ServletContextHandler();
+ context.setContextPath("/");
+ server.setHandler(context);
+
+ // Serve capture servlet
+ servlet = new WebSocketCaptureServlet();
+ ServletHolder holder = new ServletHolder(servlet);
+ holder.setInitParameter("minVersion","8");
+ context.addServlet(holder,"/");
+
+ // Start Server
+ server.start();
+
+ Connector conn = server.getConnectors()[0];
+ String host = conn.getHost();
+ if (host == null)
+ {
+ host = "localhost";
+ }
+ int port = conn.getLocalPort();
+ serverUri = new URI(String.format("ws://%s:%d/",host,port));
+ // System.out.printf("Server URI: %s%n",serverUri);
+ }
+
+ @Test
+ public void testAttemptUpgrade() throws Exception
+ {
+ SafariD00 safari = new SafariD00(serverUri);
+
+ try
+ {
+ safari.connect();
+ safari.issueHandshake();
+ Assert.fail("Expected upgrade failure");
+ }
+ catch(IllegalStateException e) {
+ String respHeader = e.getMessage();
+ Assert.assertThat("Response Header", respHeader, allOf(
+ containsString("HTTP/1.1 400 Unsupported"),
+ containsString("minVersion [8]"),
+ containsString("[13, 8]")));
+ }
+ finally
+ {
+ // System.out.println("Closing client socket");
+ safari.disconnect();
+ }
+ }
+
+ public static void threadSleep(int dur, TimeUnit unit) throws InterruptedException
+ {
+ long ms = TimeUnit.MILLISECONDS.convert(dur,unit);
+ Thread.sleep(ms);
+ }
+
+ @After
+ public void stopServer() throws Exception
+ {
+ server.stop();
+ }
+}
diff --git a/tests/test-webapps/test-jndi-webapp/src/main/templates/jetty-test-jndi-header.xml b/tests/test-webapps/test-jndi-webapp/src/main/templates/jetty-test-jndi-header.xml
index 0faae62..de012e7 100644
--- a/tests/test-webapps/test-jndi-webapp/src/main/templates/jetty-test-jndi-header.xml
+++ b/tests/test-webapps/test-jndi-webapp/src/main/templates/jetty-test-jndi-header.xml
@@ -15,6 +15,8 @@
<!-- =============================================================== -->
<!-- Configure the webapp -->
<!-- =============================================================== -->
+ <!-- Only uncomment if you are not using etc/jetty-plus.xml from start.ini
+
<Set name="configurationClasses">
<Call class="org.eclipse.jetty.webapp.Configuration$ClassList" name="serverDefault">
<Arg><Ref refid="Server" /></Arg>
@@ -30,6 +32,7 @@
</Call>
</Call>
</Set>
+ -->
<Set name="contextPath">/test-jndi</Set>
<Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test-jndi.war</Set>
diff --git a/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/templates/annotations-context-header.xml b/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/templates/annotations-context-header.xml
index 775008f..1ec49c7 100644
--- a/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/templates/annotations-context-header.xml
+++ b/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/templates/annotations-context-header.xml
@@ -18,6 +18,9 @@
<!-- =============================================================== -->
<!-- Configure the webapp -->
<!-- =============================================================== -->
+ <!-- Only uncomment this if you are not using the plus and
+ annotations sections of start.ini
+
<Set name="configurationClasses">
<Call class="org.eclipse.jetty.webapp.Configuration$ClassList" name="serverDefault">
<Arg><Ref refid="Server" /></Arg>
@@ -33,6 +36,7 @@
</Call>
</Call>
</Set>
+ -->
<Set name="contextPath">/test-spec</Set>
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/test-spec.war</Set>