diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1edd6ca..fd4afef 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -6,6 +6,7 @@ on:
- '9.4.x'
- '10.0.x'
- '11.0.x'
+ - '12.0.x'
pull_request:
jobs:
@@ -13,4 +14,4 @@ jobs:
name: Build
uses: jetty/.github/.github/workflows/maven-ci.yml@main
with:
- jdk-matrix: '[ "11", "21" ]'
+ jdk-matrix: '[ "17", "21" ]'
diff --git a/embedded/client-certificates/pom.xml b/embedded/client-certificates/pom.xml
index de1613b..e682d27 100644
--- a/embedded/client-certificates/pom.xml
+++ b/embedded/client-certificates/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
client-certificates
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Client Certificates
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Client Certificates
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-webapp
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/client-certificates/src/main/java/examples/EnableClientCertificates.java b/embedded/client-certificates/src/main/java/examples/EnableClientCertificates.java
index 515a437..7691e13 100644
--- a/embedded/client-certificates/src/main/java/examples/EnableClientCertificates.java
+++ b/embedded/client-certificates/src/main/java/examples/EnableClientCertificates.java
@@ -13,19 +13,20 @@
package examples;
-import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
+import org.eclipse.jetty.server.Handler;
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.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.SecuredRedirectHandler;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
/**
@@ -48,7 +49,7 @@ public static void main(String[] args) throws Exception
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(ResourceFactory.of(server)));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
sslContextFactory.setWantClientAuth(true); // Turn on javax.net.ssl.SSLEngine.wantClientAuth
@@ -69,7 +70,7 @@ public static void main(String[] args) throws Exception
server.addConnector(httpsConnector);
// Add a Handlers for requests
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(new SecuredRedirectHandler());
handlers.addHandler(new HelloHandler("Hello Secure World"));
server.setHandler(handlers);
@@ -78,16 +79,14 @@ public static void main(String[] args) throws Exception
server.join();
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = EnableClientCertificates.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/client-certificates/src/main/java/examples/HelloHandler.java b/embedded/client-certificates/src/main/java/examples/HelloHandler.java
index 2bd05d5..c0d8682 100644
--- a/embedded/client-certificates/src/main/java/examples/HelloHandler.java
+++ b/embedded/client-certificates/src/main/java/examples/HelloHandler.java
@@ -11,15 +11,16 @@
// ========================================================================
//
-import java.io.IOException;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
+import java.nio.charset.StandardCharsets;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.Response;
+import org.eclipse.jetty.util.BufferUtil;
+import org.eclipse.jetty.util.Callback;
-public class HelloHandler extends AbstractHandler
+public class HelloHandler extends Handler.Abstract
{
private final String msg;
@@ -29,10 +30,10 @@ public HelloHandler(String msg)
}
@Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ public boolean handle(Request request, Response response, Callback callback) throws Exception
{
- response.setContentType("text/plain");
- response.getWriter().printf("%s%n", msg);
- baseRequest.setHandled(true);
+ response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain; charset=utf-8");
+ response.write(true, BufferUtil.toBuffer(String.format("%s%n", msg), StandardCharsets.UTF_8), callback);
+ return true;
}
}
diff --git a/embedded/client/pom.xml b/embedded/client/pom.xml
index 0f430b0..2d4f08b 100644
--- a/embedded/client/pom.xml
+++ b/embedded/client/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
client
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Client
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Client
@@ -24,12 +24,12 @@
org.eclipse.jetty.http2
- http2-client
+ jetty-http2-client
${jetty.version}
org.eclipse.jetty.http2
- http2-http-client-transport
+ jetty-http2-client-transport
${jetty.version}
diff --git a/embedded/client/src/main/java/examples/ClientWithDynamicConnection.java b/embedded/client/src/main/java/examples/ClientWithDynamicConnection.java
index b32cf93..88c5c4f 100644
--- a/embedded/client/src/main/java/examples/ClientWithDynamicConnection.java
+++ b/embedded/client/src/main/java/examples/ClientWithDynamicConnection.java
@@ -14,11 +14,11 @@
package examples;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.api.ContentResponse;
-import org.eclipse.jetty.client.dynamic.HttpClientTransportDynamic;
-import org.eclipse.jetty.client.http.HttpClientConnectionFactory;
+import org.eclipse.jetty.client.ContentResponse;
+import org.eclipse.jetty.client.transport.HttpClientConnectionFactory;
+import org.eclipse.jetty.client.transport.HttpClientTransportDynamic;
import org.eclipse.jetty.http2.client.HTTP2Client;
-import org.eclipse.jetty.http2.client.http.ClientConnectionFactoryOverHTTP2;
+import org.eclipse.jetty.http2.client.transport.ClientConnectionFactoryOverHTTP2;
import org.eclipse.jetty.io.ClientConnectionFactory;
import org.eclipse.jetty.io.ClientConnector;
import org.eclipse.jetty.util.ssl.SslContextFactory;
@@ -36,10 +36,10 @@ public static void main(String[] args) throws Exception
ClientConnector clientConnector = new ClientConnector();
clientConnector.setSslContextFactory(sslContextFactory);
- ClientConnectionFactory.Info h1 = HttpClientConnectionFactory.HTTP11;
+ ClientConnectionFactory.Info http1Info = HttpClientConnectionFactory.HTTP11;
HTTP2Client http2Client = new HTTP2Client(clientConnector);
- ClientConnectionFactory.Info h2 = new ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
- HttpClientTransportDynamic dynamicTransport = new HttpClientTransportDynamic(clientConnector, h1, h2);
+ ClientConnectionFactoryOverHTTP2.HTTP2 http2Info = new ClientConnectionFactoryOverHTTP2.HTTP2(http2Client);
+ HttpClientTransportDynamic dynamicTransport = new HttpClientTransportDynamic(clientConnector, http1Info, http2Info);
HttpClient httpClient = new HttpClient(dynamicTransport);
try
diff --git a/embedded/compressed-encoding/pom.xml b/embedded/compressed-encoding/pom.xml
index f9073ae..7a3ae83 100644
--- a/embedded/compressed-encoding/pom.xml
+++ b/embedded/compressed-encoding/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
compressed-encoding
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: HTML Compressed Encoding
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: HTML Compressed Encoding
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/compressed-encoding/src/main/java/examples/GzipRequestResponseExample.java b/embedded/compressed-encoding/src/main/java/examples/GzipRequestResponseExample.java
index 1910a84..f6d86a5 100644
--- a/embedded/compressed-encoding/src/main/java/examples/GzipRequestResponseExample.java
+++ b/embedded/compressed-encoding/src/main/java/examples/GzipRequestResponseExample.java
@@ -13,17 +13,15 @@
package examples;
-import java.io.File;
import java.net.URI;
import java.net.URL;
-import java.nio.file.Path;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.gzip.GzipHandler;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.util.resource.PathResource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class GzipRequestResponseExample
{
@@ -56,8 +54,9 @@ public static void main(String[] args) throws Exception
ServletContextHandler context = new ServletContextHandler();
gzip.setHandler(context);
+
context.setContextPath("/");
- context.setBaseResource(new PathResource(webRootUri));
+ context.setBaseResource(ResourceFactory.of(context).newResource(webRootUri));
context.setWelcomeFiles(new String[]{"index.html"});
// Adding Servlets
diff --git a/embedded/connectors/pom.xml b/embedded/connectors/pom.xml
index dcdac58..2d92148 100644
--- a/embedded/connectors/pom.xml
+++ b/embedded/connectors/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
connectors
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Connectors
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Connectors
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-webapp
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/connectors/src/main/java/examples/ConnectorSpecificContexts.java b/embedded/connectors/src/main/java/examples/ConnectorSpecificContexts.java
index d098eac..6fcd091 100644
--- a/embedded/connectors/src/main/java/examples/ConnectorSpecificContexts.java
+++ b/embedded/connectors/src/main/java/examples/ConnectorSpecificContexts.java
@@ -11,6 +11,8 @@
// ========================================================================
//
+import java.util.List;
+
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandler;
@@ -40,14 +42,14 @@ public static void main(String[] args) throws Exception
ContextHandler ctxHelloA = new ContextHandler();
ctxHelloA.setContextPath("/");
ctxHelloA.setHandler(new HelloHandler("Hello Connection A"));
- ctxHelloA.setVirtualHosts(new String[]{"@connA"}); // Reference connector name
+ ctxHelloA.setVirtualHosts(List.of("@connA")); // Reference connector name
contexts.addHandler(ctxHelloA);
// Hello Handler (connection B)
ContextHandler ctxHelloB = new ContextHandler();
ctxHelloB.setContextPath("/");
ctxHelloB.setHandler(new HelloHandler("Greetings from Connection B"));
- ctxHelloB.setVirtualHosts(new String[]{"@connB"}); // Reference connector name
+ ctxHelloB.setVirtualHosts(List.of("@connB")); // Reference connector name
contexts.addHandler(ctxHelloB);
server.start();
diff --git a/embedded/connectors/src/main/java/examples/ConnectorSpecificWebapps.java b/embedded/connectors/src/main/java/examples/ConnectorSpecificWebapps.java
index 8bd03c4..e1b7f5c 100644
--- a/embedded/connectors/src/main/java/examples/ConnectorSpecificWebapps.java
+++ b/embedded/connectors/src/main/java/examples/ConnectorSpecificWebapps.java
@@ -11,10 +11,12 @@
// ========================================================================
//
+import java.util.List;
+
+import org.eclipse.jetty.ee10.webapp.WebAppContext;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
public class ConnectorSpecificWebapps
{
@@ -33,21 +35,21 @@ public static void main(String[] args) throws Exception
server.addConnector(connectorB);
// Basic handler collection
- HandlerCollection contexts = new HandlerCollection();
+ ContextHandlerCollection contexts = new ContextHandlerCollection();
server.setHandler(contexts);
// WebApp A
WebAppContext appA = new WebAppContext();
appA.setContextPath("/a");
appA.setWar("./src/main/webapps/webapp-a/");
- appA.setVirtualHosts(new String[]{"@connA"}); // Reference connector name
+ appA.setVirtualHosts(List.of("@connA")); // Reference connector name
contexts.addHandler(appA);
// WebApp B
WebAppContext appB = new WebAppContext();
appB.setContextPath("/b");
appB.setWar("./src/main/webapps/webapp-b/");
- appB.setVirtualHosts(new String[]{"@connB"}); // Reference connector name
+ appB.setVirtualHosts(List.of("@connB")); // Reference connector name
contexts.addHandler(appB);
server.start();
diff --git a/embedded/connectors/src/main/java/examples/HelloHandler.java b/embedded/connectors/src/main/java/examples/HelloHandler.java
index 2bd05d5..c0d8682 100644
--- a/embedded/connectors/src/main/java/examples/HelloHandler.java
+++ b/embedded/connectors/src/main/java/examples/HelloHandler.java
@@ -11,15 +11,16 @@
// ========================================================================
//
-import java.io.IOException;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
+import java.nio.charset.StandardCharsets;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.Response;
+import org.eclipse.jetty.util.BufferUtil;
+import org.eclipse.jetty.util.Callback;
-public class HelloHandler extends AbstractHandler
+public class HelloHandler extends Handler.Abstract
{
private final String msg;
@@ -29,10 +30,10 @@ public HelloHandler(String msg)
}
@Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ public boolean handle(Request request, Response response, Callback callback) throws Exception
{
- response.setContentType("text/plain");
- response.getWriter().printf("%s%n", msg);
- baseRequest.setHandled(true);
+ response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain; charset=utf-8");
+ response.write(true, BufferUtil.toBuffer(String.format("%s%n", msg), StandardCharsets.UTF_8), callback);
+ return true;
}
}
diff --git a/embedded/connectors/src/main/java/examples/ManyConnectors.java b/embedded/connectors/src/main/java/examples/ManyConnectors.java
index d2a01f0..a3af30c 100644
--- a/embedded/connectors/src/main/java/examples/ManyConnectors.java
+++ b/embedded/connectors/src/main/java/examples/ManyConnectors.java
@@ -24,6 +24,8 @@
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
/**
@@ -33,17 +35,17 @@ public class ManyConnectors
{
public static void main(String[] args) throws Exception
{
- // Since this example shows off SSL configuration, we need a keystore
- // with the appropriate key. These lookup of jetty.home is purely a hack
- // to get access to a keystore that we use in many unit tests and should
- // probably be a direct path to your own keystore.
- Resource keystoreResource = findKeyStore();
-
// Create a basic jetty server object without declaring the port. Since
// we are configuring connectors directly we'll be setting ports on
// those connectors.
Server server = new Server();
+ // Since this example shows off SSL configuration, we need a keystore
+ // with the appropriate key. These lookup of jetty.home is purely a hack
+ // to get access to a keystore that we use in many unit tests and should
+ // probably be a direct path to your own keystore.
+ Resource keystoreResource = findKeyStore(ResourceFactory.of(server));
+
// HTTP Configuration
// HttpConfiguration is a collection of configuration information
// appropriate for http and https. The default scheme for http is
@@ -118,16 +120,14 @@ public static void main(String[] args) throws Exception
server.join();
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = ManyConnectors.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/connectors/src/main/java/examples/ServerConnectorHttps.java b/embedded/connectors/src/main/java/examples/ServerConnectorHttps.java
index 6b28794..aff73fd 100644
--- a/embedded/connectors/src/main/java/examples/ServerConnectorHttps.java
+++ b/embedded/connectors/src/main/java/examples/ServerConnectorHttps.java
@@ -22,6 +22,8 @@
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
public class ServerConnectorHttps
@@ -33,7 +35,7 @@ public static void main(String[] args) throws Exception
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(ResourceFactory.of(server)));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
@@ -58,16 +60,14 @@ public static void main(String[] args) throws Exception
server.join();
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = ServerConnectorHttps.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/deploying/pom.xml b/embedded/deploying/pom.xml
index 84f4aab..cf63ca5 100644
--- a/embedded/deploying/pom.xml
+++ b/embedded/deploying/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
deploying
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Deploying
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Deploying
@@ -26,13 +26,13 @@
org.eclipse.jetty
- jetty-servlet
+ jetty-xml
${jetty.version}
- org.eclipse.jetty
- jetty-xml
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/deploying/src/main/java/examples/DelayedWebAppDeployExample.java b/embedded/deploying/src/main/java/examples/DelayedWebAppDeployExample.java
index c47f1b4..47f6b45 100644
--- a/embedded/deploying/src/main/java/examples/DelayedWebAppDeployExample.java
+++ b/embedded/deploying/src/main/java/examples/DelayedWebAppDeployExample.java
@@ -14,21 +14,21 @@
package examples;
import java.io.File;
-import java.io.IOException;
import java.nio.file.Path;
import java.util.concurrent.TimeUnit;
+
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-
+import org.eclipse.jetty.ee10.webapp.WebAppContext;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.util.Callback;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Demonstrate an Embedded Jetty server where the server
@@ -37,6 +37,8 @@
*/
public class DelayedWebAppDeployExample
{
+ private static final Logger LOG = LoggerFactory.getLogger(DelayedWebAppDeployExample.class);
+
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
@@ -45,7 +47,7 @@ public static void main(String[] args) throws Exception
ContextHandlerCollection contexts = new ContextHandlerCollection();
// The server handler list
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(contexts);
handlers.addHandler(new UnavailableHandler());
@@ -60,15 +62,15 @@ public static void main(String[] args) throws Exception
server.join();
}
- public static class UnavailableHandler extends AbstractHandler
+ public static class UnavailableHandler extends Handler.Abstract
{
@Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ public boolean handle(Request request, Response response, Callback callback) throws Exception
{
// Indicate a 503 status
response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
// tell jetty that this request was handled (making others handlers not run for this request)
- baseRequest.setHandled(true);
+ return true;
}
}
@@ -102,7 +104,7 @@ public void run()
}
catch (Exception e)
{
- e.printStackTrace();
+ LOG.warn("Unable to create/start webapp {} from {}", warPath, contextPath, e);
}
}
}
@@ -123,14 +125,13 @@ public void contextInitialized(ServletContextEvent sce)
}
catch (InterruptedException e)
{
- e.printStackTrace();
+ LOG.warn("Context initialization interrupted {}", sce, e);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce)
{
-
}
}
}
diff --git a/embedded/deploying/src/main/java/examples/WebAppsHotDeployExample.java b/embedded/deploying/src/main/java/examples/WebAppsHotDeployExample.java
index 875a570..8ce0162 100644
--- a/embedded/deploying/src/main/java/examples/WebAppsHotDeployExample.java
+++ b/embedded/deploying/src/main/java/examples/WebAppsHotDeployExample.java
@@ -13,7 +13,6 @@
package examples;
-import java.io.File;
import java.io.FileNotFoundException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -24,13 +23,12 @@
import org.eclipse.jetty.deploy.AppLifeCycle;
import org.eclipse.jetty.deploy.DeploymentManager;
import org.eclipse.jetty.deploy.graph.Node;
-import org.eclipse.jetty.deploy.providers.WebAppProvider;
+import org.eclipse.jetty.deploy.providers.ContextProvider;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerCollection;
public class WebAppsHotDeployExample
{
@@ -39,9 +37,9 @@ public static void main(String[] args) throws Exception
Server server = new Server(8080);
ContextHandlerCollection contexts = new ContextHandlerCollection();
- HandlerCollection handlers = new HandlerCollection();
-
- handlers.setHandlers(new Handler[]{contexts, new DefaultHandler()});
+ Handler.Sequence handlers = new Handler.Sequence();
+ handlers.addHandler(contexts);
+ handlers.addHandler(new DefaultHandler());
server.setHandler(handlers);
@@ -59,9 +57,10 @@ public static void main(String[] args) throws Exception
{
throw new FileNotFoundException("Missing System Property 'jetty.base'");
}
- Path jettyBase = new File(jettyBaseProp).toPath().toAbsolutePath();
+ Path jettyBase = Path.of(jettyBaseProp).toAbsolutePath();
- WebAppProvider webAppProvider = new WebAppProvider();
+ ContextProvider webAppProvider = new ContextProvider();
+ webAppProvider.setEnvironmentName("ee10");
webAppProvider.setMonitoredDirName(jettyBase.resolve("webapps").toString());
deploymentManager.addAppProvider(webAppProvider);
diff --git a/embedded/error-handling/pom.xml b/embedded/error-handling/pom.xml
index 2fd26fb..7d3dbe8 100644
--- a/embedded/error-handling/pom.xml
+++ b/embedded/error-handling/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
error-handling
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Error Handling
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Error Handling
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-webapp
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/error-handling/src/main/java/examples/ErrorPageErrorHandlerExample.java b/embedded/error-handling/src/main/java/examples/ErrorPageErrorHandlerExample.java
index 9d75d61..9ab0492 100644
--- a/embedded/error-handling/src/main/java/examples/ErrorPageErrorHandlerExample.java
+++ b/embedded/error-handling/src/main/java/examples/ErrorPageErrorHandlerExample.java
@@ -17,19 +17,18 @@
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URI;
+
import jakarta.servlet.DispatcherType;
import jakarta.servlet.RequestDispatcher;
-import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ErrorPageErrorHandler;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.StringUtil;
@@ -53,7 +52,7 @@ public static void main(String[] args) throws Exception
errorPageErrorHandler.addErrorPage(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE, "/errors");
context.setErrorHandler(errorPageErrorHandler);
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(context);
handlers.addHandler(new DefaultHandler()); // handle non-context errors
server.setHandler(context);
diff --git a/embedded/error-handling/src/main/java/examples/ErrorStatusExample.java b/embedded/error-handling/src/main/java/examples/ErrorStatusExample.java
index 291854a..fdb2590 100644
--- a/embedded/error-handling/src/main/java/examples/ErrorStatusExample.java
+++ b/embedded/error-handling/src/main/java/examples/ErrorStatusExample.java
@@ -17,16 +17,15 @@
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URI;
-import jakarta.servlet.ServletException;
+
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.util.IO;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -44,7 +43,7 @@ public static void main(String[] args) throws Exception
context.setContextPath("/");
context.addServlet(RangeHandlingServlet.class, "/demo");
context.addServlet(DefaultServlet.class, "/"); // handle static content and errors for this context
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(context);
handlers.addHandler(new DefaultHandler()); // handle non-context errors
server.setHandler(context);
diff --git a/embedded/file-server/pom.xml b/embedded/file-server/pom.xml
index d888d64..3d5b8d2 100644
--- a/embedded/file-server/pom.xml
+++ b/embedded/file-server/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
file-server
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: File Server
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: File Server
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-webapp
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/file-server/src/main/java/examples/ResourceHandlerFromClasspath.java b/embedded/file-server/src/main/java/examples/ResourceHandlerFromClasspath.java
index 96f3687..7e0e777 100644
--- a/embedded/file-server/src/main/java/examples/ResourceHandlerFromClasspath.java
+++ b/embedded/file-server/src/main/java/examples/ResourceHandlerFromClasspath.java
@@ -19,6 +19,7 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class ResourceHandlerFromClasspath
{
@@ -40,9 +41,10 @@ public static void main(String[] args) throws Exception
URI webRootUri = f.toURI().resolve("./").normalize();
System.err.println("WebRoot is " + webRootUri);
+ ResourceFactory resourceFactory = ResourceFactory.of(server);
ResourceHandler handler = new ResourceHandler();
- handler.setBaseResource(Resource.newResource(webRootUri));
- handler.setDirectoriesListed(true);
+ handler.setBaseResource(resourceFactory.newResource(webRootUri));
+ handler.setDirAllowed(true);
server.setHandler(handler);
diff --git a/embedded/file-server/src/main/java/examples/ResourceHandlerFromFileSystem.java b/embedded/file-server/src/main/java/examples/ResourceHandlerFromFileSystem.java
index dc094c4..8ca9385 100644
--- a/embedded/file-server/src/main/java/examples/ResourceHandlerFromFileSystem.java
+++ b/embedded/file-server/src/main/java/examples/ResourceHandlerFromFileSystem.java
@@ -20,6 +20,7 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.util.resource.PathResource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class ResourceHandlerFromFileSystem
{
@@ -35,9 +36,10 @@ public static void main(String[] args) throws Exception
}
System.err.println("WebRoot is " + webRootPath);
+ ResourceFactory resourceFactory = ResourceFactory.of(server);
ResourceHandler handler = new ResourceHandler();
- handler.setBaseResource(new PathResource(webRootPath));
- handler.setDirectoriesListed(true);
+ handler.setBaseResource(resourceFactory.newResource(webRootPath));
+ handler.setDirAllowed(true);
server.setHandler(handler);
diff --git a/embedded/file-server/src/main/java/examples/ServletFileServerMultipleLocations.java b/embedded/file-server/src/main/java/examples/ServletFileServerMultipleLocations.java
index 0fc8731..b429697 100644
--- a/embedded/file-server/src/main/java/examples/ServletFileServerMultipleLocations.java
+++ b/embedded/file-server/src/main/java/examples/ServletFileServerMultipleLocations.java
@@ -13,18 +13,18 @@
package examples;
-import java.io.File;
import java.net.URI;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
/**
* Using a {@link ServletContextHandler} serve static file content from multiple locations.
@@ -64,7 +64,8 @@ public static void main(String[] args) throws Exception
// This is also known as the handler tree (in jetty speak)
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
- context.setBaseResource(Resource.newResource(webRootUri));
+ ResourceFactory resourceFactory = ResourceFactory.of(context);
+ context.setBaseResource(resourceFactory.newResource(webRootUri));
context.setWelcomeFiles(new String[]{"index.html", "index.htm", "alt-index.html"});
server.setHandler(context);
diff --git a/embedded/file-server/src/main/java/examples/ServletFileServerSingleLocation.java b/embedded/file-server/src/main/java/examples/ServletFileServerSingleLocation.java
index b7747c7..0287339 100644
--- a/embedded/file-server/src/main/java/examples/ServletFileServerSingleLocation.java
+++ b/embedded/file-server/src/main/java/examples/ServletFileServerSingleLocation.java
@@ -16,12 +16,13 @@
import java.net.URI;
import java.net.URL;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
/**
* Using a {@link ServletContextHandler} serve static file content from single location
@@ -51,7 +52,8 @@ public static void main(String[] args) throws Exception
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
- context.setBaseResource(Resource.newResource(webRootUri));
+ ResourceFactory resourceFactory = ResourceFactory.of(context);
+ context.setBaseResource(resourceFactory.newResource(webRootUri));
server.setHandler(context);
ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
diff --git a/embedded/file-upload/pom.xml b/embedded/file-upload/pom.xml
index efbb16a..8fdf3d2 100644
--- a/embedded/file-upload/pom.xml
+++ b/embedded/file-upload/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
file-upload
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: File Upload
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: File Upload
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/file-upload/src/main/java/examples/MultipartMimeUploadExample.java b/embedded/file-upload/src/main/java/examples/MultipartMimeUploadExample.java
index 71f5d8b..6c163e8 100644
--- a/embedded/file-upload/src/main/java/examples/MultipartMimeUploadExample.java
+++ b/embedded/file-upload/src/main/java/examples/MultipartMimeUploadExample.java
@@ -17,40 +17,48 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
+import java.io.StringWriter;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
+
import jakarta.servlet.MultipartConfigElement;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;
-
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
+import org.eclipse.jetty.http.HttpField;
+import org.eclipse.jetty.http.HttpFields;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.http.MultiPart;
+import org.eclipse.jetty.http.MultiPartFormData;
+import org.eclipse.jetty.io.Content;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Response;
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.AbstractHandler;
import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.handler.SecuredRedirectHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.util.BufferUtil;
+import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
public class MultipartMimeUploadExample
@@ -60,6 +68,7 @@ public static void main(String[] args) throws Exception
Server server = new Server();
int httpPort = 8080;
int httpsPort = 8443;
+ ResourceFactory resourceFactory = ResourceFactory.of(server);
// Setup HTTP Connector
HttpConfiguration httpConf = new HttpConfiguration();
@@ -74,7 +83,7 @@ public static void main(String[] args) throws Exception
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(resourceFactory));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
@@ -105,11 +114,11 @@ public static void main(String[] args) throws Exception
MultipartConfigElement multipartConfig = new MultipartConfigElement(location, maxFileSize, maxRequestSize, fileSizeThreshold);
// Add a Handlers for requests
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(new SecuredRedirectHandler());
- handlers.addHandler(newUploadHandler(multipartConfig, outputDir));
+ handlers.addHandler(newUploadHandler(outputDir));
handlers.addHandler(newServletUploadHandler(multipartConfig, outputDir));
- handlers.addHandler(newResourceHandler());
+ handlers.addHandler(newResourceHandler(resourceFactory));
handlers.addHandler(new DefaultHandler());
server.setHandler(handlers);
@@ -117,25 +126,20 @@ public static void main(String[] args) throws Exception
server.join();
}
- private static URI findClassLoaderResource(String resourceName) throws URISyntaxException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = MultipartMimeUploadExample.class.getClassLoader();
- URL f = cl.getResource(resourceName);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + resourceName);
+ throw new RuntimeException("Unable to read " + resourceName);
}
- return f.toURI();
- }
-
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
- {
- return Resource.newResource(findClassLoaderResource("ssl/keystore"));
+ return resource;
}
- private static Handler newUploadHandler(MultipartConfigElement multipartConfig, Path outputDir) throws IOException
+ private static Handler newUploadHandler(Path outputDir) throws IOException
{
- return new UploadHandler("/handler/upload", multipartConfig, outputDir);
+ return new UploadHandler("/handler/upload", outputDir);
}
private static ServletContextHandler newServletUploadHandler(MultipartConfigElement multipartConfig, Path outputDir) throws IOException
@@ -152,12 +156,9 @@ private static ServletContextHandler newServletUploadHandler(MultipartConfigElem
return context;
}
- private static Handler newResourceHandler() throws URISyntaxException, MalformedURLException
+ private static Handler newResourceHandler(ResourceFactory resourceFactory)
{
- URI indexUri = findClassLoaderResource("static-upload/index.html");
- URI staticUploadBaseUri = indexUri.resolve("./").normalize();
- Resource baseResource = Resource.newResource(staticUploadBaseUri);
-
+ Resource baseResource = resourceFactory.newClassLoaderResource("static-upload/");
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setBaseResource(baseResource);
@@ -176,35 +177,6 @@ private static Path ensureDirExists(Path path) throws IOException
return dir;
}
- public static void processParts(HttpServletRequest request, HttpServletResponse response, Path outputDir) throws ServletException, IOException
- {
- response.setContentType("text/plain");
- response.setCharacterEncoding("utf-8");
-
- PrintWriter out = response.getWriter();
-
- for (Part part : request.getParts())
- {
- out.printf("Got Part[%s].size=%s%n", part.getName(), part.getSize());
- out.printf("Got Part[%s].contentType=%s%n", part.getName(), part.getContentType());
- out.printf("Got Part[%s].submittedFileName=%s%n", part.getName(), part.getSubmittedFileName());
- String filename = part.getSubmittedFileName();
- if (StringUtil.isNotBlank(filename))
- {
- // ensure we don't have "/" and ".." in the raw form.
- filename = URLEncoder.encode(filename, "utf-8");
-
- Path outputFile = outputDir.resolve(filename);
- try (InputStream inputStream = part.getInputStream();
- OutputStream outputStream = Files.newOutputStream(outputFile, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING))
- {
- IO.copy(inputStream, outputStream);
- out.printf("Saved Part[%s] to %s%n", part.getName(), outputFile);
- }
- }
- }
- }
-
public static class SaveUploadServlet extends HttpServlet
{
private final Path outputDir;
@@ -218,45 +190,117 @@ public SaveUploadServlet(Path outputDir) throws IOException
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
- processParts(request, response, outputDir);
+ response.setContentType("text/plain");
+ response.setCharacterEncoding("utf-8");
+
+ PrintWriter out = response.getWriter();
+
+ for (Part part : request.getParts())
+ {
+ out.printf("Got Part[%s].size=%s%n", part.getName(), part.getSize());
+ out.printf("Got Part[%s].contentType=%s%n", part.getName(), part.getContentType());
+ out.printf("Got Part[%s].submittedFileName=%s%n", part.getName(), part.getSubmittedFileName());
+ String filename = part.getSubmittedFileName();
+ if (StringUtil.isNotBlank(filename))
+ {
+ // ensure we don't have "/" and ".." in the raw form.
+ filename = URLEncoder.encode(filename, "utf-8");
+
+ Path outputFile = outputDir.resolve(filename);
+ try (InputStream inputStream = part.getInputStream();
+ OutputStream outputStream = Files.newOutputStream(outputFile, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING))
+ {
+ IO.copy(inputStream, outputStream);
+ out.printf("Saved Part[%s] to %s%n", part.getName(), outputFile);
+ }
+ }
+ }
}
}
- public static class UploadHandler extends AbstractHandler
+ public static class UploadHandler extends Handler.Abstract
{
private final String contextPath;
- private final MultipartConfigElement multipartConfig;
private final Path outputDir;
- public UploadHandler(String contextPath, MultipartConfigElement multipartConfig, Path outputDir) throws IOException
+ public UploadHandler(String contextPath, Path outputDir) throws IOException
{
super();
this.contextPath = contextPath;
- this.multipartConfig = multipartConfig;
this.outputDir = outputDir.resolve("handler");
ensureDirExists(this.outputDir);
}
@Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ public boolean handle(Request request, Response response, Callback callback) throws Exception
{
- if (!target.startsWith(contextPath))
+ if (!request.getHttpURI().getPath().startsWith(contextPath))
{
// not meant for us, skip it.
- return;
+ return false;
}
if (!request.getMethod().equalsIgnoreCase("POST"))
{
- response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- return;
+ // Not a POST method
+ Response.writeError(request, response, callback, HttpStatus.METHOD_NOT_ALLOWED_405);
+ return true;
+ }
+
+ String contentType = request.getHeaders().get(HttpHeader.CONTENT_TYPE);
+ if (!HttpField.getValueParameters(contentType, null).equals("multipart/form-data"))
+ {
+ // Not a content-type supporting multi-part
+ Response.writeError(request, response, callback, HttpStatus.NOT_ACCEPTABLE_406);
+ return true;
+ }
+
+ String boundary = MultiPart.extractBoundary(contentType);
+ MultiPartFormData.Parser formData = new MultiPartFormData.Parser(boundary);
+ formData.setFilesDirectory(outputDir);
+
+ try
+ {
+ String responseBody = process(formData.parse(request).join()); // May block waiting for multipart form data.
+ response.setStatus(HttpStatus.OK_200);
+ response.write(true, BufferUtil.toBuffer(responseBody), callback);
+ }
+ catch (Exception x)
+ {
+ Response.writeError(request, response, callback, x);
+ }
+ return true;
+ }
+
+ private String process(MultiPartFormData.Parts parts) throws IOException
+ {
+ StringWriter body = new StringWriter();
+ PrintWriter out = new PrintWriter(body);
+
+ for (MultiPart.Part part : parts)
+ {
+ out.printf("Got Part[%s].length=%s%n", part.getName(), part.getLength());
+ HttpFields headers = part.getHeaders();
+ for (HttpField field: headers)
+ out.printf("Got Part[%s].header[%s]=%s%n", part.getName(), field.getName(), field.getValue());
+ out.printf("Got Part[%s].fileName=%s%n", part.getName(), part.getFileName());
+ String filename = part.getFileName();
+ if (StringUtil.isNotBlank(filename))
+ {
+ // ensure we don't have "/" and ".." in the raw form.
+ filename = URLEncoder.encode(filename, StandardCharsets.UTF_8);
+
+ Path outputFile = outputDir.resolve(filename);
+ try (InputStream inputStream = Content.Source.asInputStream(part.getContentSource());
+ OutputStream outputStream = Files.newOutputStream(outputFile, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING))
+ {
+ IO.copy(inputStream, outputStream);
+ out.printf("Saved Part[%s] to %s%n", part.getName(), outputFile);
+ }
+ }
}
- // Ensure request knows about MultiPartConfigElement setup.
- request.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, multipartConfig);
- // Process the request
- processParts(request, response, outputDir);
- baseRequest.setHandled(true);
+ return body.toString();
}
}
}
diff --git a/embedded/form-post/pom.xml b/embedded/form-post/pom.xml
index 1d491da..b428654 100644
--- a/embedded/form-post/pom.xml
+++ b/embedded/form-post/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
form-post
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: HTML Form POST
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: HTML Form POST
@@ -25,8 +25,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/form-post/src/main/java/examples/FormRestrictionsExample.java b/embedded/form-post/src/main/java/examples/FormRestrictionsExample.java
index ded77c3..696b536 100644
--- a/embedded/form-post/src/main/java/examples/FormRestrictionsExample.java
+++ b/embedded/form-post/src/main/java/examples/FormRestrictionsExample.java
@@ -15,6 +15,7 @@
import java.io.IOException;
import java.net.URI;
+import java.nio.file.Path;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
@@ -23,20 +24,23 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.client.FormRequestContent;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.api.ContentResponse;
-import org.eclipse.jetty.client.api.Request;
-import org.eclipse.jetty.client.util.FormContentProvider;
-import org.eclipse.jetty.client.util.MultiPartContentProvider;
-import org.eclipse.jetty.client.util.StringContentProvider;
+import org.eclipse.jetty.client.ContentResponse;
+import org.eclipse.jetty.client.MultiPartRequestContent;
+import org.eclipse.jetty.client.Request;
+import org.eclipse.jetty.client.StringRequestContent;
+import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.http.MultiPart;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.server.Handler.Sequence;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.util.Fields;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.component.LifeCycle;
@@ -96,7 +100,7 @@ public void startServer(int port) throws Exception
servletContextHandler.addServlet(ServiceFormServlet.class, "/form/service")
.getRegistration().setMultipartConfig(multipartConfig);
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(servletContextHandler);
handlers.addHandler(new DefaultHandler());
@@ -124,16 +128,15 @@ public void submitVariousForms(HttpClient client, URI uri)
submitForm(httpMethod + " with application/x-www-form-urlencoded",
client.newRequest(uri)
.method(httpMethod)
- .content(new FormContentProvider(wwwForm)));
+ .body(new FormRequestContent(wwwForm)));
- MultiPartContentProvider multipartForm = new MultiPartContentProvider();
- multipartForm.addFieldPart("UserName", new StringContentProvider("Andrés Dorantes de Carranza"), null);
- multipartForm.close();
+ MultiPartRequestContent multiPartForm = new MultiPartRequestContent();
+ multiPartForm.addPart(new MultiPart.ContentSourcePart("UserName", null, HttpFields.EMPTY, new StringRequestContent("Andrés Dorantes de Carranza")));
submitForm(httpMethod + " with multipart/form-data",
client.newRequest(uri)
.method(httpMethod)
- .content(multipartForm));
+ .body(multiPartForm));
}
}
@@ -141,7 +144,7 @@ private void submitForm(String description, Request request)
{
try
{
- ContentResponse response = request.header("Accept", "text/plain").send();
+ ContentResponse response = request.headers((fields) -> fields.put("Accept", "text/plain")).send();
if (response.getStatus() == HttpStatus.OK_200)
{
System.out.printf("%-17s - %-44s -> OK: %s%n", request.getPath(), description, response.getContentAsString().trim());
diff --git a/embedded/http-config/pom.xml b/embedded/http-config/pom.xml
index 14c65fb..eb34ab8 100644
--- a/embedded/http-config/pom.xml
+++ b/embedded/http-config/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
http-config
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: HTTP Configuration
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: HTTP Configuration
@@ -25,8 +25,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/http-config/src/main/java/examples/HttpConfigExample.java b/embedded/http-config/src/main/java/examples/HttpConfigExample.java
index 07bbe22..3d3c6a1 100644
--- a/embedded/http-config/src/main/java/examples/HttpConfigExample.java
+++ b/embedded/http-config/src/main/java/examples/HttpConfigExample.java
@@ -13,20 +13,21 @@
package examples;
-import java.io.IOException;
import java.net.URI;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
+import java.nio.charset.StandardCharsets;
+import org.eclipse.jetty.client.ContentResponse;
import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.util.BufferUtil;
+import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.component.LifeCycle;
public class HttpConfigExample
@@ -50,15 +51,14 @@ public static void main(String[] args) throws Exception
connectorDefault.setPort(9191);
server.addConnector(connectorDefault);
- server.setHandler(new AbstractHandler()
+ server.setHandler(new Handler.Abstract()
{
@Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ public boolean handle(Request request, Response response, Callback callback)
{
- response.setCharacterEncoding("utf-8");
- response.setContentType("text/plain");
- response.getWriter().println("Greetings.");
- baseRequest.setHandled(true);
+ response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain; charset=utf-8");
+ response.write(true, BufferUtil.toBuffer("Greetings.", StandardCharsets.UTF_8), callback);
+ return true;
}
});
diff --git a/embedded/jndi/pom.xml b/embedded/jndi/pom.xml
index 1b688fd..1a795ce 100644
--- a/embedded/jndi/pom.xml
+++ b/embedded/jndi/pom.xml
@@ -4,23 +4,23 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
jndi
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: JNDI
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: JNDI
-
org.eclipse.jetty
- jetty-plus
+ jetty-server
${jetty.version}
+
- org.eclipse.jetty
- jetty-server
+ org.eclipse.jetty.ee10
+ jetty-ee10-plus
${jetty.version}
diff --git a/embedded/jndi/src/main/java/examples/WebAppContextWithJNDI.java b/embedded/jndi/src/main/java/examples/WebAppContextWithJNDI.java
index 5be8da4..5a11906 100644
--- a/embedded/jndi/src/main/java/examples/WebAppContextWithJNDI.java
+++ b/embedded/jndi/src/main/java/examples/WebAppContextWithJNDI.java
@@ -25,17 +25,17 @@
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
+
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
-
+import org.eclipse.jetty.ee10.webapp.WebAppContext;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.component.LifeCycle;
-import org.eclipse.jetty.util.resource.PathResource;
-import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class WebAppContextWithJNDI
{
@@ -91,7 +91,7 @@ public void startServer(int port) throws Exception
WebAppContext context = new WebAppContext();
context.setContextPath("/");
// This directory only has WEB-INF/web.xml
- context.setBaseResource(new PathResource(Paths.get("src/main/webroots/jndi-root")));
+ context.setBaseResource(ResourceFactory.of(context).newResource(Paths.get("src/main/webroots/jndi-root")));
context.addServlet(JndiDumpServlet.class, "/jndi-dump");
new org.eclipse.jetty.plus.jndi.Resource(null, "val/foo", Integer.valueOf(770));
diff --git a/embedded/pom.xml b/embedded/pom.xml
index 6d94a81..9ef3b88 100644
--- a/embedded/pom.xml
+++ b/embedded/pom.xml
@@ -4,13 +4,13 @@
org.eclipse.jetty.examples
jetty-examples
- 11.0.x
+ 12.0.x
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
pom
- Jetty Examples :: Jetty 11.0.x :: Embedded
+ Jetty Examples :: Jetty 12.0.x :: Embedded
client
diff --git a/embedded/redirect/pom.xml b/embedded/redirect/pom.xml
index 4db85e2..350a206 100644
--- a/embedded/redirect/pom.xml
+++ b/embedded/redirect/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
redirect
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Redirect
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Redirect
@@ -23,8 +23,8 @@
${jetty.version}
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/redirect/src/main/java/examples/HelloHandler.java b/embedded/redirect/src/main/java/examples/HelloHandler.java
index 38aac41..c0d8682 100644
--- a/embedded/redirect/src/main/java/examples/HelloHandler.java
+++ b/embedded/redirect/src/main/java/examples/HelloHandler.java
@@ -1,4 +1,4 @@
-//
+package examples;//
// ========================================================================
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others.
//
@@ -11,17 +11,16 @@
// ========================================================================
//
-package examples;
-
-import java.io.IOException;
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
+import java.nio.charset.StandardCharsets;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.Response;
+import org.eclipse.jetty.util.BufferUtil;
+import org.eclipse.jetty.util.Callback;
-public class HelloHandler extends AbstractHandler
+public class HelloHandler extends Handler.Abstract
{
private final String msg;
@@ -31,10 +30,10 @@ public HelloHandler(String msg)
}
@Override
- public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ public boolean handle(Request request, Response response, Callback callback) throws Exception
{
- response.setContentType("text/plain");
- response.getWriter().printf("%s%n", msg);
- baseRequest.setHandled(true);
+ response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain; charset=utf-8");
+ response.write(true, BufferUtil.toBuffer(String.format("%s%n", msg), StandardCharsets.UTF_8), callback);
+ return true;
}
}
diff --git a/embedded/redirect/src/main/java/examples/SecuredRedirectHandlerExample.java b/embedded/redirect/src/main/java/examples/SecuredRedirectHandlerExample.java
index 9e863fa..a302cc8 100644
--- a/embedded/redirect/src/main/java/examples/SecuredRedirectHandlerExample.java
+++ b/embedded/redirect/src/main/java/examples/SecuredRedirectHandlerExample.java
@@ -16,24 +16,23 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.eclipse.jetty.http.HttpTester;
+import org.eclipse.jetty.server.Handler;
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.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.SecuredRedirectHandler;
import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
public class SecuredRedirectHandlerExample
@@ -86,7 +85,7 @@ public void startServer(int httpPort, int httpsPort) throws Exception
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(ResourceFactory.of(server)));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
@@ -103,7 +102,7 @@ public void startServer(int httpPort, int httpsPort) throws Exception
server.addConnector(httpsConnector);
// Add a Handlers for requests
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
handlers.addHandler(new SecuredRedirectHandler());
handlers.addHandler(new HelloHandler("Hello Secure World"));
server.setHandler(handlers);
@@ -137,16 +136,14 @@ private void testRequest(String host, int port, String rawRequest) throws IOExce
}
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = SecuredRedirectHandlerExample.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/rewrite/pom.xml b/embedded/rewrite/pom.xml
index 7c96425..29c1f38 100644
--- a/embedded/rewrite/pom.xml
+++ b/embedded/rewrite/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
rewrite
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Rewrite
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Rewrite
@@ -28,8 +28,8 @@
${jetty.version}
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/rewrite/src/main/java/examples/MovedPermanentlyRuleExample.java b/embedded/rewrite/src/main/java/examples/MovedPermanentlyRuleExample.java
index 0ead92f..0b08cda 100644
--- a/embedded/rewrite/src/main/java/examples/MovedPermanentlyRuleExample.java
+++ b/embedded/rewrite/src/main/java/examples/MovedPermanentlyRuleExample.java
@@ -13,7 +13,6 @@
package examples;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -25,19 +24,20 @@
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.servlet.http.HttpServletResponse;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.jetty.http.HttpTester;
-import org.eclipse.jetty.rewrite.handler.RedirectUtil;
import org.eclipse.jetty.rewrite.handler.RewriteHandler;
import org.eclipse.jetty.rewrite.handler.Rule;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.component.LifeCycle;
-import org.eclipse.jetty.util.resource.PathResource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class MovedPermanentlyRuleExample
{
@@ -77,7 +77,7 @@ public void startServer(int port) throws Exception
connector.setPort(port);
server.addConnector(connector);
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
server.setHandler(handlers);
// Add Rewrite / Redirect handlers + Rules
@@ -98,7 +98,7 @@ public void startServer(int port) throws Exception
ServletContextHandler context = new ServletContextHandler();
handlers.addHandler(context);
context.setContextPath("/");
- context.setBaseResource(new PathResource(webRootPath));
+ context.setBaseResource(ResourceFactory.of(context).newResource(webRootPath));
context.setWelcomeFiles(new String[]{"index.html"});
context.addServlet(DumpServlet.class, "/dump/*");
@@ -162,18 +162,24 @@ public void setReplacement(String replacement)
}
@Override
- public String matchAndApply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
+ public Handler matchAndApply(Handler input)
{
- Matcher matcher = regex.matcher(request.getRequestURL());
+ Matcher matcher = regex.matcher(input.getHttpURI().toString());
boolean matches = matcher.matches();
if (matches)
{
- String location = response.encodeRedirectURL(replacement);
- response.setHeader("Location", RedirectUtil.toRedirectURL(request, location));
- response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
- response.getOutputStream().flush(); // no output / content
- response.getOutputStream().close();
- return location;
+ return new Handler(input)
+ {
+ @Override
+ protected boolean handle(Response response, Callback callback)
+ {
+ String location = Response.toRedirectURI(input, replacement);
+ response.setStatus(HttpStatus.MOVED_TEMPORARILY_302);
+ response.getHeaders().put(HttpHeader.LOCATION, location);
+ callback.succeeded();
+ return true;
+ }
+ };
}
return null;
}
diff --git a/embedded/servlet-config/pom.xml b/embedded/servlet-config/pom.xml
index d4420d6..e7565fb 100644
--- a/embedded/servlet-config/pom.xml
+++ b/embedded/servlet-config/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
servlet-config
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Servlet Configuration
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Servlet Configuration
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/servlet-config/src/main/java/examples/AddFilterMultipleMapping.java b/embedded/servlet-config/src/main/java/examples/AddFilterMultipleMapping.java
index 88d2909..a7dbdbc 100644
--- a/embedded/servlet-config/src/main/java/examples/AddFilterMultipleMapping.java
+++ b/embedded/servlet-config/src/main/java/examples/AddFilterMultipleMapping.java
@@ -28,11 +28,12 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.FilterHolder;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.FilterHolder;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class AddFilterMultipleMapping
{
@@ -84,7 +85,7 @@ public static void main(String[] args) throws Exception
// This is also known as the handler tree (in jetty speak)
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
- context.setBaseResource(Resource.newResource(webRootUri));
+ context.setBaseResource(ResourceFactory.of(context).newResource(webRootUri));
server.setHandler(context);
EnumSet dispatches = EnumSet.allOf(DispatcherType.class);
diff --git a/embedded/servlet-security/pom.xml b/embedded/servlet-security/pom.xml
index c60eeef..2bd6cb2 100644
--- a/embedded/servlet-security/pom.xml
+++ b/embedded/servlet-security/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
servlet-security
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Servlet Security Constraints
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Servlet Security Constraints
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/servlet-security/src/main/java/examples/ServletTransportGuaranteeExample.java b/embedded/servlet-security/src/main/java/examples/ServletTransportGuaranteeExample.java
index e420de1..65aab5e 100644
--- a/embedded/servlet-security/src/main/java/examples/ServletTransportGuaranteeExample.java
+++ b/embedded/servlet-security/src/main/java/examples/ServletTransportGuaranteeExample.java
@@ -13,12 +13,11 @@
package examples;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-
-import org.eclipse.jetty.security.ConstraintAware;
-import org.eclipse.jetty.security.ConstraintMapping;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
+import org.eclipse.jetty.ee10.servlet.security.ConstraintAware;
+import org.eclipse.jetty.ee10.servlet.security.ConstraintMapping;
+import org.eclipse.jetty.security.Constraint;
import org.eclipse.jetty.security.SecurityHandler;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
@@ -26,10 +25,9 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.util.security.Constraint;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
public class ServletTransportGuaranteeExample
@@ -39,6 +37,7 @@ public static void main(String[] args) throws Exception
Server server = new Server();
int httpPort = 8080;
int httpsPort = 8443;
+ ResourceFactory resourceFactory = ResourceFactory.of(server);
// Setup HTTP Connector
HttpConfiguration httpConf = new HttpConfiguration();
@@ -53,7 +52,7 @@ public static void main(String[] args) throws Exception
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(resourceFactory));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
@@ -82,8 +81,9 @@ public static void main(String[] args) throws Exception
ConstraintAware constraint = (ConstraintAware)security;
ConstraintMapping mapping = new ConstraintMapping();
mapping.setPathSpec("/*");
- Constraint dc = new Constraint();
- dc.setDataConstraint(Constraint.DC_CONFIDENTIAL);
+ Constraint dc = new Constraint.Builder()
+ .transport(Constraint.Transport.SECURE)
+ .build();
mapping.setConstraint(dc);
constraint.addConstraintMapping(mapping);
}
@@ -102,16 +102,14 @@ public static void main(String[] args) throws Exception
server.join();
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = ServletTransportGuaranteeExample.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/simple-server/pom.xml b/embedded/simple-server/pom.xml
index 9e0a2c4..d5cddfa 100644
--- a/embedded/simple-server/pom.xml
+++ b/embedded/simple-server/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
simple-server
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Simple Server
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Simple Server
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-webapp
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/virtual-hosts/pom.xml b/embedded/virtual-hosts/pom.xml
index a018b15..4643c49 100644
--- a/embedded/virtual-hosts/pom.xml
+++ b/embedded/virtual-hosts/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
virtual-hosts
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: Virtual Hosts
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: Virtual Hosts
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/virtual-hosts/src/main/java/VirtualHostsExample.java b/embedded/virtual-hosts/src/main/java/VirtualHostsExample.java
index 270513a..a3a7656 100644
--- a/embedded/virtual-hosts/src/main/java/VirtualHostsExample.java
+++ b/embedded/virtual-hosts/src/main/java/VirtualHostsExample.java
@@ -14,15 +14,17 @@
import java.io.IOException;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
+import java.util.List;
+
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.component.LifeCycle;
@@ -53,7 +55,7 @@ private void stopServer()
private void startServer() throws Exception
{
server = new Server(8080);
- HandlerCollection handlers = new HandlerCollection();
+ ContextHandlerCollection handlers = new ContextHandlerCollection();
server.setHandler(handlers);
handlers.addHandler(createContext("/", "foo.company.com", HelloFooServlet.class));
@@ -70,7 +72,7 @@ private ContextHandler createContext(String contextPath, String host, Class ex
context.addServlet(virtualHostSpecificServlet, "/hello");
context.addServlet(DefaultServlet.class, "/");
- context.setVirtualHosts(new String[]{host});
+ context.setVirtualHosts(List.of(host));
return context;
}
diff --git a/embedded/webapp-context/pom.xml b/embedded/webapp-context/pom.xml
index 67cffd2..27a47a8 100644
--- a/embedded/webapp-context/pom.xml
+++ b/embedded/webapp-context/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
webapp-context
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: WebApp Context
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: WebApp Context
@@ -19,8 +19,8 @@
- org.eclipse.jetty
- jetty-webapp
+ org.eclipse.jetty.ee10
+ jetty-ee10-webapp
${jetty.version}
diff --git a/embedded/webapp-context/src/main/java/examples/WebAppContextFromClasspath.java b/embedded/webapp-context/src/main/java/examples/WebAppContextFromClasspath.java
index a67df92..3980b9a 100644
--- a/embedded/webapp-context/src/main/java/examples/WebAppContextFromClasspath.java
+++ b/embedded/webapp-context/src/main/java/examples/WebAppContextFromClasspath.java
@@ -17,7 +17,7 @@
import java.net.URL;
import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.ee10.webapp.WebAppContext;
public class WebAppContextFromClasspath
{
diff --git a/embedded/webapp-context/src/main/java/examples/WebAppContextFromFileSystem.java b/embedded/webapp-context/src/main/java/examples/WebAppContextFromFileSystem.java
index 00d6316..26fb71e 100644
--- a/embedded/webapp-context/src/main/java/examples/WebAppContextFromFileSystem.java
+++ b/embedded/webapp-context/src/main/java/examples/WebAppContextFromFileSystem.java
@@ -18,7 +18,7 @@
import java.nio.file.Paths;
import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.ee10.webapp.WebAppContext;
public class WebAppContextFromFileSystem
{
diff --git a/embedded/websocket-jakarta-api/pom.xml b/embedded/websocket-jakarta-api/pom.xml
index cc46cdf..696d7a7 100644
--- a/embedded/websocket-jakarta-api/pom.xml
+++ b/embedded/websocket-jakarta-api/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
websocket-jakarta-api
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: WebSocket with Jakarta EE API
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: WebSocket with Jakarta EE API
@@ -19,14 +19,14 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
- org.eclipse.jetty.websocket
- websocket-jakarta-server
+ org.eclipse.jetty.ee10.websocket
+ jetty-ee10-websocket-jakarta-server
${jetty.version}
diff --git a/embedded/websocket-jakarta-api/src/main/java/examples/JakartaBrowserMain.java b/embedded/websocket-jakarta-api/src/main/java/examples/JakartaBrowserMain.java
index f7d21d9..09f9a33 100644
--- a/embedded/websocket-jakarta-api/src/main/java/examples/JakartaBrowserMain.java
+++ b/embedded/websocket-jakarta-api/src/main/java/examples/JakartaBrowserMain.java
@@ -24,12 +24,14 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.eclipse.jetty.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer;
+import org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -88,7 +90,7 @@ private void setupServer(int port, int sslPort) throws MalformedURLException, UR
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(ResourceFactory.of(server)));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
@@ -121,7 +123,8 @@ private void setupServer(int port, int sslPort) throws MalformedURLException, UR
// Setup ServletContext
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
- context.setBaseResource(Resource.newResource(webRootUri));
+ ResourceFactory resourceFactory = ResourceFactory.of(context);
+ context.setBaseResource(resourceFactory.newResource(webRootUri));
ServletHolder holder = context.addServlet(DefaultServlet.class, "/");
holder.setInitParameter("dirAllowed", "true");
server.setHandler(context);
@@ -132,16 +135,14 @@ private void setupServer(int port, int sslPort) throws MalformedURLException, UR
LOG.info("{} setup on (http) port {} and (https) port {}", this.getClass().getName(), port, sslPort);
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = JakartaBrowserMain.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/websocket-jetty-api/pom.xml b/embedded/websocket-jetty-api/pom.xml
index 5e02abf..0fa28d7 100644
--- a/embedded/websocket-jetty-api/pom.xml
+++ b/embedded/websocket-jetty-api/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
websocket-jetty-api
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: WebSocket with Jetty API
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: WebSocket with Jetty API
@@ -19,14 +19,14 @@
- org.eclipse.jetty
- jetty-servlet
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
- org.eclipse.jetty.websocket
- websocket-jetty-server
+ org.eclipse.jetty.ee10.websocket
+ jetty-ee10-websocket-jetty-server
${jetty.version}
diff --git a/embedded/websocket-jetty-api/src/main/java/examples/JettyTimeSocket.java b/embedded/websocket-jetty-api/src/main/java/examples/JettyTimeSocket.java
index c3a5eca..b045c69 100644
--- a/embedded/websocket-jetty-api/src/main/java/examples/JettyTimeSocket.java
+++ b/embedded/websocket-jetty-api/src/main/java/examples/JettyTimeSocket.java
@@ -13,24 +13,27 @@
package examples;
-import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
+import org.eclipse.jetty.websocket.api.Callback;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
-import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketOpen;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@WebSocket
public class JettyTimeSocket implements Runnable
{
+ private static final Logger LOG = LoggerFactory.getLogger(JettyTimeSocket.class);
private TimeZone timezone;
private Session session;
- @OnWebSocketConnect
+ @OnWebSocketOpen
public void onOpen(Session session)
{
this.session = session;
@@ -55,12 +58,12 @@ public void run()
dateFormat.setTimeZone(timezone);
String timestamp = dateFormat.format(new Date());
- this.session.getRemote().sendString(timestamp);
+ this.session.sendText(timestamp, Callback.NOOP);
TimeUnit.SECONDS.sleep(1);
}
- catch (InterruptedException | IOException e)
+ catch (InterruptedException e)
{
- e.printStackTrace();
+ LOG.warn("Send of TEXT message interrupted", e);
}
}
}
diff --git a/embedded/websocket-jetty-api/src/main/java/examples/SecureWebSocketServer.java b/embedded/websocket-jetty-api/src/main/java/examples/SecureWebSocketServer.java
index cf04289..f5dd7c4 100644
--- a/embedded/websocket-jetty-api/src/main/java/examples/SecureWebSocketServer.java
+++ b/embedded/websocket-jetty-api/src/main/java/examples/SecureWebSocketServer.java
@@ -14,9 +14,7 @@
package examples;
import java.io.IOException;
-import java.net.MalformedURLException;
import java.net.URISyntaxException;
-import java.net.URL;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
@@ -24,12 +22,19 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
+import org.eclipse.jetty.util.resource.Resources;
import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.eclipse.jetty.websocket.api.WebSocketAdapter;
-import org.eclipse.jetty.websocket.server.JettyWebSocketServlet;
-import org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory;
+import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServlet;
+import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServletFactory;
+import org.eclipse.jetty.websocket.api.Callback;
+import org.eclipse.jetty.websocket.api.Session;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
+import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Create a Secure WebSocket Server and host an Echo WebSocket endpoint on "/echo"
@@ -49,36 +54,31 @@ protected void configure(JettyWebSocketServletFactory jettyWebSocketServletFacto
}
}
- public static class EchoSocket extends WebSocketAdapter
+ public static class EchoSocket
{
- @Override
- public void onWebSocketText(String message)
+ private static final Logger LOG = LoggerFactory.getLogger(EchoSocket.class);
+
+ @OnWebSocketMessage
+ public void onWebSocketText(Session session, String message)
{
- try
- {
- getRemote().sendString(message);
- }
- catch (IOException e)
- {
- e.printStackTrace(System.err);
- }
+ session.sendText(message, Callback.NOOP);
}
- @Override
+ @OnWebSocketError
public void onWebSocketError(Throwable cause)
{
- cause.printStackTrace(System.err);
+ LOG.warn("WebSocket error", cause);
}
}
- public static void main(String[] args) throws IOException, URISyntaxException
+ public static void main(String[] args)
{
Server server = new Server();
int httpsPort = 8443;
// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
- sslContextFactory.setKeyStoreResource(findKeyStore());
+ sslContextFactory.setKeyStoreResource(findKeyStore(ResourceFactory.of(server)));
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
@@ -116,16 +116,14 @@ public static void main(String[] args) throws IOException, URISyntaxException
}
}
- private static Resource findKeyStore() throws URISyntaxException, MalformedURLException
+ private static Resource findKeyStore(ResourceFactory resourceFactory)
{
- ClassLoader cl = SecureWebSocketServer.class.getClassLoader();
- String keystoreResource = "ssl/keystore";
- URL f = cl.getResource(keystoreResource);
- if (f == null)
+ String resourceName = "ssl/keystore";
+ Resource resource = resourceFactory.newClassLoaderResource(resourceName);
+ if (Resources.isReadableFile(resource))
{
- throw new RuntimeException("Unable to find " + keystoreResource);
+ throw new RuntimeException("Unable to read " + resourceName);
}
-
- return Resource.newResource(f.toURI());
+ return resource;
}
}
diff --git a/embedded/websocket-jetty-api/src/main/java/examples/WebSocketServerViaFilter.java b/embedded/websocket-jetty-api/src/main/java/examples/WebSocketServerViaFilter.java
index 73ad0b5..19dcd8d 100644
--- a/embedded/websocket-jetty-api/src/main/java/examples/WebSocketServerViaFilter.java
+++ b/embedded/websocket-jetty-api/src/main/java/examples/WebSocketServerViaFilter.java
@@ -21,14 +21,15 @@
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.util.resource.Resource;
-import org.eclipse.jetty.websocket.server.JettyServerUpgradeRequest;
-import org.eclipse.jetty.websocket.server.JettyServerUpgradeResponse;
-import org.eclipse.jetty.websocket.server.JettyWebSocketCreator;
-import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
+import org.eclipse.jetty.ee10.websocket.server.JettyServerUpgradeRequest;
+import org.eclipse.jetty.ee10.websocket.server.JettyServerUpgradeResponse;
+import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketCreator;
+import org.eclipse.jetty.ee10.websocket.server.config.JettyWebSocketServletContainerInitializer;
+import org.eclipse.jetty.util.resource.ResourceFactory;
public class WebSocketServerViaFilter
{
@@ -64,7 +65,7 @@ public static void main(String[] args) throws URISyntaxException, MalformedURLEx
// This is also known as the handler tree (in jetty speak)
ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
- contextHandler.setBaseResource(Resource.newResource(webRootUri));
+ contextHandler.setBaseResource(ResourceFactory.of(contextHandler).newResource(webRootUri));
contextHandler.setWelcomeFiles(new String[]{"index.html"});
server.setHandler(contextHandler);
diff --git a/embedded/xml/pom.xml b/embedded/xml/pom.xml
index ab6c3d0..fd4663b 100644
--- a/embedded/xml/pom.xml
+++ b/embedded/xml/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.embedded
jetty-embedded-examples
- 11.0.x
+ 12.0.x
xml
- 11.0.x
+ 12.0.x
jar
- Jetty Examples :: Jetty 11.0.x :: Embedded :: XML
+ Jetty Examples :: Jetty 12.0.x :: Embedded :: XML
@@ -20,13 +20,13 @@
org.eclipse.jetty
- jetty-servlet
+ jetty-xml
${jetty.version}
- org.eclipse.jetty
- jetty-xml
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
${jetty.version}
diff --git a/embedded/xml/src/main/java/examples/XmlEnhancedServer.java b/embedded/xml/src/main/java/examples/XmlEnhancedServer.java
index a867469..53370bf 100644
--- a/embedded/xml/src/main/java/examples/XmlEnhancedServer.java
+++ b/embedded/xml/src/main/java/examples/XmlEnhancedServer.java
@@ -20,18 +20,18 @@
import java.util.HashMap;
import java.util.Map;
+import org.eclipse.jetty.ee10.servlet.DefaultServlet;
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee10.servlet.ServletHolder;
+import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.resource.PathResource;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
import org.eclipse.jetty.xml.XmlConfiguration;
/**
@@ -65,6 +65,9 @@ public class XmlEnhancedServer
public static void main(String[] args) throws Exception
{
Server server = new Server();
+
+ ResourceFactory resourceFactory = ResourceFactory.of(server);
+
HttpConfiguration httpConfig = new HttpConfiguration();
ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
httpConnector.setPort(8080);
@@ -84,12 +87,12 @@ public static void main(String[] args) throws Exception
URI webRootUri = f.toURI().resolve("./").normalize();
System.err.println("WebRoot is " + webRootUri);
- HandlerList handlers = new HandlerList();
+ Handler.Sequence handlers = new Handler.Sequence();
ContextHandlerCollection contexts = new ContextHandlerCollection();
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
- context.setBaseResource(Resource.newResource(webRootUri));
+ context.setBaseResource(resourceFactory.newResource(webRootUri));
contexts.addHandler(context);
ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
@@ -126,7 +129,7 @@ public static void main(String[] args) throws Exception
{
Path xmlPath = Paths.get(xml);
System.err.println("Applying XML: " + xmlPath);
- PathResource xmlResource = new PathResource(xmlPath);
+ Resource xmlResource = resourceFactory.newResource(xmlPath);
XmlConfiguration configuration = new XmlConfiguration(xmlResource);
if (lastConfig != null)
configuration.getIdMap().putAll(lastConfig.getIdMap());
diff --git a/embedded/xml/src/main/java/examples/XmlServer.java b/embedded/xml/src/main/java/examples/XmlServer.java
index 6fb8bfa..d2a1621 100644
--- a/embedded/xml/src/main/java/examples/XmlServer.java
+++ b/embedded/xml/src/main/java/examples/XmlServer.java
@@ -15,6 +15,7 @@
import java.io.BufferedReader;
import java.io.IOException;
+import java.io.InputStream;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@@ -34,6 +35,7 @@
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.resource.PathResource;
import org.eclipse.jetty.util.resource.Resource;
+import org.eclipse.jetty.util.resource.ResourceFactory;
import org.eclipse.jetty.xml.XmlConfiguration;
/**
@@ -49,6 +51,9 @@ public static void main(String[] args) throws Exception
final boolean enableHttp = !argList.contains("--disable-http");
final boolean enableHttps = !argList.contains("--disable-https");
+ // List of configured IDs from XML;
+ Map idMap;
+
// The list of XMLs in the order they should be executed.
List xmls = new ArrayList<>();
@@ -61,52 +66,57 @@ public static void main(String[] args) throws Exception
// Bonus is we also learn what JAR files we need.
// And if we look at tmpdir/start.ini we can also know what properties can be set.
- Path homeXmlPath = Paths.get("src/main/xml/home");
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-bytebufferpool.xml")));
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-threadpool.xml")));
- xmls.add(new PathResource(homeXmlPath.resolve("jetty.xml")));
- if (enableHttp)
- {
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-http.xml")));
- }
- if (enableHttps)
+ try(ResourceFactory.Closeable resourceFactory = ResourceFactory.closeable())
{
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-ssl.xml")));
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-ssl-context.xml")));
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-https.xml")));
+ Resource homeXmlResource = resourceFactory.newResource(Path.of("src/main/xml/home"));
+ Resource customBaseResource = resourceFactory.newResource(Path.of("src/main/xml/base"));
+
+ xmls.add(homeXmlResource.resolve("jetty-bytebufferpool.xml"));
+ xmls.add(homeXmlResource.resolve("jetty-threadpool.xml"));
+ xmls.add(homeXmlResource.resolve("jetty.xml"));
+ if (enableHttp)
+ {
+ xmls.add(homeXmlResource.resolve("jetty-http.xml"));
+ }
+ if (enableHttps)
+ {
+ xmls.add(homeXmlResource.resolve("jetty-ssl.xml"));
+ xmls.add(homeXmlResource.resolve("jetty-ssl-context.xml"));
+ xmls.add(homeXmlResource.resolve("jetty-https.xml"));
+ }
+ xmls.add(homeXmlResource.resolve("jetty-customrequestlog.xml"));
+
+ // Now we add our customizations
+ // In this case, it's 2 ServletContextHandlers
+ xmls.add(customBaseResource.resolve("context-foo.xml"));
+ xmls.add(customBaseResource.resolve("context-bar.xml"));
+
+ // Lets load our properties
+ Map customProps = loadProperties(customBaseResource.resolve("custom.properties"));
+
+ // Create a path suitable for output / work directory / etc.
+ Path outputPath = Paths.get("target/xmlserver-output");
+ Path resourcesPath = outputPath.resolve("resources");
+
+ ensureDirExists(outputPath);
+ ensureDirExists(outputPath.resolve("logs"));
+ ensureDirExists(resourcesPath);
+ ensureDirExists(resourcesPath.resolve("bar"));
+ ensureDirExists(resourcesPath.resolve("foo"));
+
+ // And define some common properties
+ // These 2 properties are used in MANY PLACES, define them, even if you don't use them fully.
+ customProps.put("jetty.home", outputPath.toString());
+ customProps.put("jetty.base", outputPath.toString());
+ // And define the resource paths for the contexts
+ customProps.put("custom.resources", resourcesPath.toString());
+ customProps.put("jetty.sslContext.keyStoreAbsolutePath", customBaseResource.resolve("keystore").toString());
+ customProps.put("jetty.sslContext.trustStoreAbsolutePath", customBaseResource.resolve("keystore").toString());
+
+ // Now lets tie it all together
+ idMap = configure(xmls, customProps);
}
- xmls.add(new PathResource(homeXmlPath.resolve("jetty-customrequestlog.xml")));
-
- // Now we add our customizations
- // In this case, it's 2 ServletContextHandlers
- Path customBasePath = Paths.get("src/main/xml/base");
- xmls.add(new PathResource(customBasePath.resolve("context-foo.xml")));
- xmls.add(new PathResource(customBasePath.resolve("context-bar.xml")));
-
- // Lets load our properties
- Map customProps = loadProperties(customBasePath.resolve("custom.properties"));
-
- // Create a path suitable for output / work directory / etc.
- Path outputPath = Paths.get("target/xmlserver-output");
- Path resourcesPath = outputPath.resolve("resources");
-
- ensureDirExists(outputPath);
- ensureDirExists(outputPath.resolve("logs"));
- ensureDirExists(resourcesPath);
- ensureDirExists(resourcesPath.resolve("bar"));
- ensureDirExists(resourcesPath.resolve("foo"));
-
- // And define some common properties
- // These 2 properties are used in MANY PLACES, define them, even if you don't use them fully.
- customProps.put("jetty.home", outputPath.toString());
- customProps.put("jetty.base", outputPath.toString());
- // And define the resource paths for the contexts
- customProps.put("custom.resources", resourcesPath.toString());
- customProps.put("jetty.sslContext.keyStoreAbsolutePath", customBasePath.resolve("keystore").toString());
- customProps.put("jetty.sslContext.trustStoreAbsolutePath", customBasePath.resolve("keystore").toString());
-
- // Now lets tie it all together
- Map idMap = configure(xmls, customProps);
+
Server server = (Server)idMap.get("Server");
server.start();
System.out.println("Server is running, and listening on ...");
@@ -160,13 +170,13 @@ private static void ensureDirExists(Path path) throws IOException
}
}
- private static Map loadProperties(Path path) throws IOException
+ private static Map loadProperties(Resource resource) throws IOException
{
Properties properties = new Properties();
- try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8))
+ try (InputStream in = resource.newInputStream())
{
- properties.load(reader);
+ properties.load(in);
}
return properties.entrySet().stream().collect(
diff --git a/pom.xml b/pom.xml
index f98887a..02e19b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,9 +8,9 @@
org.eclipse.jetty.examples
jetty-examples
- 11.0.x
+ 12.0.x
pom
- Jetty Examples :: Jetty 11.0.x
+ Jetty Examples :: Jetty 12.0.x
embedded
@@ -25,10 +25,10 @@
- 11
+ 17
6.2
jetty-examples
- 11.0.19
+ 12.0.5
diff --git a/standalone/pom.xml b/standalone/pom.xml
index d775f4f..8aea13b 100644
--- a/standalone/pom.xml
+++ b/standalone/pom.xml
@@ -4,11 +4,11 @@
org.eclipse.jetty.examples
jetty-examples
- 11.0.x
+ 12.0.x
jetty-standalone-examples
- 11.0.x
+ 12.0.x
pom
- Jetty Examples :: Jetty 11.0.x :: Standalone
+ Jetty Examples :: Jetty 12.0.x :: Standalone
diff --git a/webapps/hello/pom.xml b/webapps/hello/pom.xml
index 069e060..3bb4a37 100644
--- a/webapps/hello/pom.xml
+++ b/webapps/hello/pom.xml
@@ -4,12 +4,12 @@
org.eclipse.jetty.examples.webapps
jetty-webapp-examples
- 11.0.x
+ 12.0.x
hello
- 11.0.x
+ 12.0.x
war
- Jetty Examples :: Jetty 11.0.x :: Hello WebApp
+ Jetty Examples :: Jetty 12.0.x :: Hello WebApp
hello
diff --git a/webapps/pom.xml b/webapps/pom.xml
index 3e004da..372e4ed 100644
--- a/webapps/pom.xml
+++ b/webapps/pom.xml
@@ -4,13 +4,13 @@
org.eclipse.jetty.examples
jetty-examples
- 11.0.x
+ 12.0.x
org.eclipse.jetty.examples.webapps
jetty-webapp-examples
- 11.0.x
+ 12.0.x
pom
- Jetty Examples :: Jetty 11.0.x :: WebApps
+ Jetty Examples :: Jetty 12.0.x :: WebApps
hello