Bump Jetty to 12.1.10 (preserve javax.servlet via jetty-ee8 adapter)

Follow the same pattern as in the gerrit repository Id82de0bc91: upgrade
the embedded Jetty in the gitiles dev server to Jetty 12 while keeping
gitiles on javax.servlet 4.0.1 via the jetty-ee8-* adapter modules.

Dependency changes mirror gerrit's:

* tools/java_deps.MODULE.bazel: JETTY_VERSION 9.4.57.v20241219 ->
  12.1.10. Replace jetty-servlet with jetty-ee8-{nested,security,
  servlet}. Add jetty-session (standalone module in Jetty 12).
  Drop jetty-continuation (deprecated since Jetty 9, removed in
  Jetty 10+).

* lib/jetty/BUILD: expose new :nested target; :servlet exports
  jetty-ee8-servlet + runtime_deps :nested; :security exports both
  jetty-ee8-security and jetty-security; :server pulls in :session.

DevServer.java migration to the Jetty 12 ee8 API:

* org.eclipse.jetty.servlet.{ServletContextHandler,ServletHolder}
  -> org.eclipse.jetty.ee8.servlet.{...}.
* The ee8 ServletContextHandler implements Supplier<core Handler>;
  appHandler() returns handler.get() so ContextHandlerCollection
  receives the core Handler.
* Jetty 12 replaced PathResource/URL-based ResourceHandler config
  with ResourceFactory. setBaseResource takes a Resource produced
  by ResourceFactory.root().newResource(Path). setDirectoriesListed
  was renamed to setDirAllowed.

A full Jakarta EE migration (jakarta.servlet, jetty-ee10 adapter)
remains possible as separate follow-up work, matching gerrit's
deferral.

Bug: Issue 359909531
Change-Id: I430d21d4191d69595f73041cd4ea7aa40b3c864d
diff --git a/external_deps.lock.json b/external_deps.lock.json
index cc642b5..329081c 100755
--- a/external_deps.lock.json
+++ b/external_deps.lock.json
@@ -49,17 +49,15 @@
     "org.commonmark:commonmark-ext-autolink": -1853742120,
     "org.commonmark:commonmark-ext-gfm-strikethrough": 350394231,
     "org.commonmark:commonmark-ext-gfm-tables": 1881582931,
-    "org.eclipse.jetty.ee8:jetty-ee8-nested": 674982267,
-    "org.eclipse.jetty.ee8:jetty-ee8-security": -882431918,
-    "org.eclipse.jetty.ee8:jetty-ee8-servlet": -8438293,
-    "org.eclipse.jetty:jetty-continuation": -943403027,
-    "org.eclipse.jetty:jetty-http": 1984891007,
-    "org.eclipse.jetty:jetty-io": 1765684893,
-    "org.eclipse.jetty:jetty-security": 1160320567,
-    "org.eclipse.jetty:jetty-server": 280305722,
-    "org.eclipse.jetty:jetty-servlet": -2080040568,
-    "org.eclipse.jetty:jetty-session": 1652849423,
-    "org.eclipse.jetty:jetty-util": -1520256775,
+    "org.eclipse.jetty.ee8:jetty-ee8-nested": 1867536598,
+    "org.eclipse.jetty.ee8:jetty-ee8-security": -374913491,
+    "org.eclipse.jetty.ee8:jetty-ee8-servlet": 894276934,
+    "org.eclipse.jetty:jetty-http": -1223204496,
+    "org.eclipse.jetty:jetty-io": 165427602,
+    "org.eclipse.jetty:jetty-security": -117668680,
+    "org.eclipse.jetty:jetty-server": 1477679957,
+    "org.eclipse.jetty:jetty-session": 1736408150,
+    "org.eclipse.jetty:jetty-util": 1880514486,
     "org.eclipse.jetty:jetty-util-ajax": 1261604218,
     "org.hamcrest:hamcrest": 1547523135,
     "org.mockito:mockito-core": -133446801,
@@ -207,32 +205,28 @@
     "org.commonmark:commonmark-ext-gfm-tables": -1205584749,
     "org.commonmark:commonmark-ext-gfm-tables:jar:sources": 1341057091,
     "org.commonmark:commonmark:jar:sources": -1511261547,
-    "org.eclipse.jetty.ee8:jetty-ee8-nested": 2090733466,
-    "org.eclipse.jetty.ee8:jetty-ee8-nested:jar:sources": -595669194,
-    "org.eclipse.jetty.ee8:jetty-ee8-security": 1351184077,
-    "org.eclipse.jetty.ee8:jetty-ee8-security:jar:sources": 2004231816,
-    "org.eclipse.jetty.ee8:jetty-ee8-servlet": -2011833684,
-    "org.eclipse.jetty.ee8:jetty-ee8-servlet:jar:sources": 717717325,
+    "org.eclipse.jetty.ee8:jetty-ee8-nested": -65830655,
+    "org.eclipse.jetty.ee8:jetty-ee8-nested:jar:sources": -2141029892,
+    "org.eclipse.jetty.ee8:jetty-ee8-security": -1787377969,
+    "org.eclipse.jetty.ee8:jetty-ee8-security:jar:sources": -374234244,
+    "org.eclipse.jetty.ee8:jetty-ee8-servlet": 1062720147,
+    "org.eclipse.jetty.ee8:jetty-ee8-servlet:jar:sources": 1796299448,
     "org.eclipse.jetty.toolchain:jetty-servlet-api": 1364182673,
     "org.eclipse.jetty.toolchain:jetty-servlet-api:jar:sources": 736604807,
-    "org.eclipse.jetty:jetty-continuation": -801959154,
-    "org.eclipse.jetty:jetty-continuation:jar:sources": 16318779,
-    "org.eclipse.jetty:jetty-http": -293230884,
-    "org.eclipse.jetty:jetty-http:jar:sources": -1107669868,
-    "org.eclipse.jetty:jetty-io": -783344138,
-    "org.eclipse.jetty:jetty-io:jar:sources": 1011133100,
-    "org.eclipse.jetty:jetty-security": -109984940,
-    "org.eclipse.jetty:jetty-security:jar:sources": -256108816,
-    "org.eclipse.jetty:jetty-server": -1931992277,
-    "org.eclipse.jetty:jetty-server:jar:sources": 887545786,
-    "org.eclipse.jetty:jetty-servlet": -2078937455,
-    "org.eclipse.jetty:jetty-servlet:jar:sources": 607287657,
-    "org.eclipse.jetty:jetty-session": 191900471,
-    "org.eclipse.jetty:jetty-session:jar:sources": -1619577899,
-    "org.eclipse.jetty:jetty-util": 2108090903,
-    "org.eclipse.jetty:jetty-util-ajax": -328137831,
+    "org.eclipse.jetty:jetty-http": -103705944,
+    "org.eclipse.jetty:jetty-http:jar:sources": -1317713476,
+    "org.eclipse.jetty:jetty-io": -658018041,
+    "org.eclipse.jetty:jetty-io:jar:sources": 116677681,
+    "org.eclipse.jetty:jetty-security": -764531641,
+    "org.eclipse.jetty:jetty-security:jar:sources": 1985223928,
+    "org.eclipse.jetty:jetty-server": 20431065,
+    "org.eclipse.jetty:jetty-server:jar:sources": -466994191,
+    "org.eclipse.jetty:jetty-session": 602757569,
+    "org.eclipse.jetty:jetty-session:jar:sources": -1630590830,
+    "org.eclipse.jetty:jetty-util": 1084512308,
+    "org.eclipse.jetty:jetty-util-ajax": -217680963,
     "org.eclipse.jetty:jetty-util-ajax:jar:sources": -1012027683,
-    "org.eclipse.jetty:jetty-util:jar:sources": -1854246232,
+    "org.eclipse.jetty:jetty-util:jar:sources": -280937557,
     "org.hamcrest:hamcrest": 1282317766,
     "org.hamcrest:hamcrest-core": 649657847,
     "org.hamcrest:hamcrest-core:jar:sources": -1646511374,
@@ -731,24 +725,24 @@
     },
     "org.eclipse.jetty.ee8:jetty-ee8-nested": {
       "shasums": {
-        "jar": "d595ec4d116824a1d9cc921ce08d964dffd191512895c263db491316b9aa84e7",
-        "sources": "e77d8e809be22063041080736a34dc50204f2742f7838bd8d59d82d45e85f43e"
+        "jar": "240df6fb5bb28545183cbac87f191c0d21074b17a2c9d4562581a68a8d79c347",
+        "sources": "45b7a070430ced248fab480132c2a02c98b64181b619f11fdc27291fc60cdefc"
       },
-      "version": "12.1.9"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty.ee8:jetty-ee8-security": {
       "shasums": {
-        "jar": "92af8672681672da01d41901a293ff970b47cbae052500f4fb4b1890ef03eab2",
-        "sources": "373d7aa39c2d687fb2d8b7d0272ea282f45088688243bea97c7427b49ec64a36"
+        "jar": "85351106e71c1036256488bbd2c84879d6316c67cdce3b44dda7835daf82e3c9",
+        "sources": "d5e6227dfbde0e6beb3cf2976cc64049a85b828143bb328f3de3ef06e5a4803f"
       },
-      "version": "12.1.9"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty.ee8:jetty-ee8-servlet": {
       "shasums": {
-        "jar": "82a66f9558a8b215c031aea35c436d30e0b4720abf662763bfc051b2febac525",
-        "sources": "3413e3d21b6b12ea45b6e2bb59657398248f0de6ce9072d6218a8151d251abfc"
+        "jar": "f593838935e9c15b9cd6bbe8707af6f5e8204f2732c88c84b654962bac660dbe",
+        "sources": "53b2477db964532be722a1ff8f53ab4d7f88b87012f4e2b4e3360c5ecd08aff0"
       },
-      "version": "12.1.9"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty.toolchain:jetty-servlet-api": {
       "shasums": {
@@ -757,61 +751,47 @@
       },
       "version": "4.0.9"
     },
-    "org.eclipse.jetty:jetty-continuation": {
-      "shasums": {
-        "jar": "ba6c5faadfcd4ef8066b96e07a5c865af2b950a78d1354853ec6df0253140165",
-        "sources": "dd9f4d6b3cea76e9d4993ae18d04c60e6f780563c544282478dc79418f148dbc"
-      },
-      "version": "9.4.57.v20241219"
-    },
     "org.eclipse.jetty:jetty-http": {
       "shasums": {
-        "jar": "02c6514977f0051dfdecf8d0799acf7a88fd8008a5fd9320a92f2e5db45d297b",
-        "sources": "1851f55b408241a6ae692730dd9bda9d1ecf7f0be6a9ccc471affa5bf8d07b9c"
+        "jar": "090f276739fd9bf8c30511007caec669ea3804b1df1061c37f44467474bee71d",
+        "sources": "4d416e2686881085327d3a28e349029d4ae9fc9b44db831291633f18bbf01625"
       },
-      "version": "9.4.57.v20241219"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty:jetty-io": {
       "shasums": {
-        "jar": "f6246a2cf0abcee7f0971217c0ce4cd30d8ce15a91530363457113907ab38690",
-        "sources": "f21960b5fe18c1fa4281aa0ba1ce8f2f7d4d8f00e64e08d536b6d6577ca92489"
+        "jar": "448fc0f8f6f5f7251fc46de8e3aae7da14bd7c571a8043dac3dc381d08228fa0",
+        "sources": "bf40abffd40e759b16b642e12dfacb7bca1d0c937f5456b62506cc78169f6b56"
       },
-      "version": "9.4.57.v20241219"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty:jetty-security": {
       "shasums": {
-        "jar": "af923d4f395a73bf8ddcb754f42d7617c6b7055e37e5a6b625ed894f73107ae9",
-        "sources": "0f8718fe938f0c8a5c3098129b67d13381c1fef0d56765627ccc2e017fc2654b"
+        "jar": "2f34b7895cec4e3547a1b52e12e7e92b3f3a110bf3c17637f8743ca3f4e42f0c",
+        "sources": "9e55b7f04431d4cc723a85a18ddc910e71f5b1a284c28b059d297d07509b4ff8"
       },
-      "version": "9.4.57.v20241219"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty:jetty-server": {
       "shasums": {
-        "jar": "ba957ae07da647023cfa52c923732aea1c67f5273a594cee1863365dfebb9a02",
-        "sources": "089098dce0a947401a52bd00056427e1a2e348a71340a00e496c3139c14bafcb"
+        "jar": "4b0108e87abada7027123deca17186249413232dad0a2bd58a4e70a987b5354a",
+        "sources": "5e7693e35285d286dcd0bfdc73d74e6824027eeaaa0a9b4c70c0080475c22f71"
       },
-      "version": "9.4.57.v20241219"
-    },
-    "org.eclipse.jetty:jetty-servlet": {
-      "shasums": {
-        "jar": "c5e9517974dec9e4606b2d810f4995ea81091b1e24bd9640cb45d8b2aefd722c",
-        "sources": "d3214106ebbfa9034aa041ea26caa080a99c494ae6275f88c95bc63796bc0367"
-      },
-      "version": "9.4.57.v20241219"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty:jetty-session": {
       "shasums": {
-        "jar": "121a9c2c9ba7274d751fe3e0d5408612c95b46df2ed20910cfecced5ae7b1659",
-        "sources": "0480336a1919fe4d8e043363804a261c02c86ab26691bd33d0cd9ea1949e790d"
+        "jar": "164649123d15a3f2be5c196e82aa652dff05c75362db71b0f4ab6bb35165020a",
+        "sources": "b11e8cfb2db04ac2d1633bccfd47ba9e1b3afca0b75d4354a38140ba3e94c83e"
       },
-      "version": "12.1.9"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty:jetty-util": {
       "shasums": {
-        "jar": "6ccbf678716778e316cc097d8aada4fe2a2e16c0bbfd8a1763204d6724b423f4",
-        "sources": "77d5935c637276d08da2e1141a7fe4d9db4a2d072b6b418b625b261009d0cb4c"
+        "jar": "c52b4ff62cdacca8a399c611231129e6bd1074db7e3892e78cd106725cdd0ef1",
+        "sources": "209630667d8e042f187bed4e754c3f8af7c5247888fc83b8dc97b5bb2134d435"
       },
-      "version": "9.4.57.v20241219"
+      "version": "12.1.10"
     },
     "org.eclipse.jetty:jetty-util-ajax": {
       "shasums": {
@@ -1107,27 +1087,29 @@
     ],
     "org.eclipse.jetty:jetty-http": [
       "org.eclipse.jetty:jetty-io",
-      "org.eclipse.jetty:jetty-util"
+      "org.eclipse.jetty:jetty-util",
+      "org.slf4j:slf4j-api"
     ],
     "org.eclipse.jetty:jetty-io": [
-      "org.eclipse.jetty:jetty-util"
+      "org.eclipse.jetty:jetty-util",
+      "org.slf4j:slf4j-api"
     ],
     "org.eclipse.jetty:jetty-security": [
-      "org.eclipse.jetty:jetty-server"
+      "org.eclipse.jetty:jetty-server",
+      "org.slf4j:slf4j-api"
     ],
     "org.eclipse.jetty:jetty-server": [
-      "javax.servlet:javax.servlet-api",
       "org.eclipse.jetty:jetty-http",
-      "org.eclipse.jetty:jetty-io"
-    ],
-    "org.eclipse.jetty:jetty-servlet": [
-      "org.eclipse.jetty:jetty-security",
-      "org.eclipse.jetty:jetty-util-ajax"
+      "org.eclipse.jetty:jetty-io",
+      "org.slf4j:slf4j-api"
     ],
     "org.eclipse.jetty:jetty-session": [
       "org.eclipse.jetty:jetty-server",
       "org.slf4j:slf4j-api"
     ],
+    "org.eclipse.jetty:jetty-util": [
+      "org.slf4j:slf4j-api"
+    ],
     "org.eclipse.jetty:jetty-util-ajax": [
       "org.eclipse.jetty:jetty-util",
       "org.slf4j:slf4j-api"
@@ -2450,37 +2432,34 @@
       "javax.servlet.descriptor",
       "javax.servlet.http"
     ],
-    "org.eclipse.jetty:jetty-continuation": [
-      "org.eclipse.jetty.continuation"
-    ],
     "org.eclipse.jetty:jetty-http": [
       "org.eclipse.jetty.http",
       "org.eclipse.jetty.http.compression",
+      "org.eclipse.jetty.http.content",
       "org.eclipse.jetty.http.pathmap"
     ],
     "org.eclipse.jetty:jetty-io": [
       "org.eclipse.jetty.io",
+      "org.eclipse.jetty.io.content",
+      "org.eclipse.jetty.io.internal",
       "org.eclipse.jetty.io.jmx",
       "org.eclipse.jetty.io.ssl"
     ],
     "org.eclipse.jetty:jetty-security": [
       "org.eclipse.jetty.security",
-      "org.eclipse.jetty.security.authentication"
+      "org.eclipse.jetty.security.authentication",
+      "org.eclipse.jetty.security.internal",
+      "org.eclipse.jetty.security.jaas",
+      "org.eclipse.jetty.security.jaas.callback",
+      "org.eclipse.jetty.security.jaas.spi"
     ],
     "org.eclipse.jetty:jetty-server": [
       "org.eclipse.jetty.server",
       "org.eclipse.jetty.server.handler",
       "org.eclipse.jetty.server.handler.gzip",
       "org.eclipse.jetty.server.handler.jmx",
-      "org.eclipse.jetty.server.jmx",
-      "org.eclipse.jetty.server.nio",
-      "org.eclipse.jetty.server.resource",
-      "org.eclipse.jetty.server.session"
-    ],
-    "org.eclipse.jetty:jetty-servlet": [
-      "org.eclipse.jetty.servlet",
-      "org.eclipse.jetty.servlet.jmx",
-      "org.eclipse.jetty.servlet.listener"
+      "org.eclipse.jetty.server.internal",
+      "org.eclipse.jetty.server.jmx"
     ],
     "org.eclipse.jetty:jetty-session": [
       "org.eclipse.jetty.session"
@@ -2490,7 +2469,7 @@
       "org.eclipse.jetty.util.annotation",
       "org.eclipse.jetty.util.component",
       "org.eclipse.jetty.util.compression",
-      "org.eclipse.jetty.util.log",
+      "org.eclipse.jetty.util.jndi",
       "org.eclipse.jetty.util.preventers",
       "org.eclipse.jetty.util.resource",
       "org.eclipse.jetty.util.security",
@@ -2804,8 +2783,6 @@
       "org.eclipse.jetty.ee8:jetty-ee8-servlet:jar:sources",
       "org.eclipse.jetty.toolchain:jetty-servlet-api",
       "org.eclipse.jetty.toolchain:jetty-servlet-api:jar:sources",
-      "org.eclipse.jetty:jetty-continuation",
-      "org.eclipse.jetty:jetty-continuation:jar:sources",
       "org.eclipse.jetty:jetty-http",
       "org.eclipse.jetty:jetty-http:jar:sources",
       "org.eclipse.jetty:jetty-io",
@@ -2814,8 +2791,6 @@
       "org.eclipse.jetty:jetty-security:jar:sources",
       "org.eclipse.jetty:jetty-server",
       "org.eclipse.jetty:jetty-server:jar:sources",
-      "org.eclipse.jetty:jetty-servlet",
-      "org.eclipse.jetty:jetty-servlet:jar:sources",
       "org.eclipse.jetty:jetty-session",
       "org.eclipse.jetty:jetty-session:jar:sources",
       "org.eclipse.jetty:jetty-util",
@@ -2911,12 +2886,14 @@
     },
     "org.eclipse.jetty:jetty-http": {
       "org.eclipse.jetty.http.HttpFieldPreEncoder": [
-        "org.eclipse.jetty.http.Http1FieldPreEncoder"
+        "org.eclipse.jetty.http.Http10FieldPreEncoder",
+        "org.eclipse.jetty.http.Http11FieldPreEncoder"
       ]
     },
     "org.eclipse.jetty:jetty-http:jar:sources": {
       "org.eclipse.jetty.http.HttpFieldPreEncoder": [
-        "org.eclipse.jetty.http.Http1FieldPreEncoder"
+        "org.eclipse.jetty.http.Http10FieldPreEncoder",
+        "org.eclipse.jetty.http.Http11FieldPreEncoder"
       ]
     },
     "org.openjdk.jmh:jmh-generator-annprocess": {
diff --git a/java/com/google/gitiles/dev/DevServer.java b/java/com/google/gitiles/dev/DevServer.java
index 042dd49..56b43b7 100644
--- a/java/com/google/gitiles/dev/DevServer.java
+++ b/java/com/google/gitiles/dev/DevServer.java
@@ -30,7 +30,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
-import java.net.URISyntaxException;
 import java.net.UnknownHostException;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
@@ -41,14 +40,14 @@
 import java.util.Set;
 import javax.servlet.Servlet;
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jetty.ee8.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee8.servlet.ServletHolder;
 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.ResourceHandler;
-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.ResourceFactory;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Config;
@@ -148,19 +147,21 @@
     handler.setContextPath(
         MoreObjects.firstNonNull(cfg.getString("gitiles", null, "contextPath"), ""));
     handler.addServlet(new ServletHolder(servlet), "/*");
-    return handler;
+    // ee8 ContextHandler implements Supplier<org.eclipse.jetty.server.Handler>;
+    // unwrap to the core Handler for installation into the server's handler tree.
+    return handler.get();
   }
 
-  private Handler staticHandler() throws IOException {
+  private Handler staticHandler() {
     Path staticRoot = sourceRoot.resolve("resources/com/google/gitiles/static");
     ResourceHandler rh = new ResourceHandler();
-    try {
-      rh.setBaseResource(new PathResource(staticRoot.toUri().toURL()));
-    } catch (URISyntaxException e) {
-      throw new IOException(e);
-    }
+    // Jetty 12 replaced PathResource/URL-based construction with ResourceFactory.
+    // ResourceFactory.root() returns a process-lifetime factory suitable for
+    // configuration done before any container LifeCycle is started.
+    rh.setBaseResource(ResourceFactory.root().newResource(staticRoot));
     rh.setWelcomeFiles(new String[] {});
-    rh.setDirectoriesListed(false);
+    // Jetty 12 renamed setDirectoriesListed -> setDirAllowed.
+    rh.setDirAllowed(false);
     ContextHandler handler = new ContextHandler("/+static");
     handler.setHandler(rh);
     return handler;
diff --git a/lib/jetty/BUILD b/lib/jetty/BUILD
index a857b58..57e1e23 100644
--- a/lib/jetty/BUILD
+++ b/lib/jetty/BUILD
@@ -9,14 +9,23 @@
     exports = [
         ":security",
         "//lib:servlet-api",
-        "@external_deps//:org_eclipse_jetty_jetty_servlet",
+        "@external_deps//:org_eclipse_jetty_ee8_jetty_ee8_servlet",
     ],
+    runtime_deps = [
+        ":nested",
+    ],
+)
+
+java_library(
+    name = "nested",
+    exports = ["@external_deps//:org_eclipse_jetty_ee8_jetty_ee8_nested"],
 )
 
 java_library(
     name = "security",
     exports = [
         ":server",
+        "@external_deps//:org_eclipse_jetty_ee8_jetty_ee8_security",
         "@external_deps//:org_eclipse_jetty_jetty_security",
     ],
 )
@@ -24,15 +33,15 @@
 java_library(
     name = "server",
     exports = [
-        ":continuation",
         ":http",
+        ":session",
         "@external_deps//:org_eclipse_jetty_jetty_server",
     ],
 )
 
 java_library(
-    name = "continuation",
-    exports = ["@external_deps//:org_eclipse_jetty_jetty_continuation"],
+    name = "session",
+    exports = ["@external_deps//:org_eclipse_jetty_jetty_session"],
 )
 
 java_library(
diff --git a/tools/java_deps.MODULE.bazel b/tools/java_deps.MODULE.bazel
index 5dea951..77836a2 100644
--- a/tools/java_deps.MODULE.bazel
+++ b/tools/java_deps.MODULE.bazel
@@ -12,7 +12,7 @@
 
 SLF4J_VERSION = "2.0.17"
 
-JETTY_VERSION = "9.4.57.v20241219"
+JETTY_VERSION = "12.1.10"
 
 OW2_ASM_VERSION = "9.9.1"
 
@@ -45,8 +45,11 @@
     "org.eclipse.jetty:jetty-io",
     "org.eclipse.jetty:jetty-security",
     "org.eclipse.jetty:jetty-server",
-    "org.eclipse.jetty:jetty-servlet",
+    "org.eclipse.jetty:jetty-session",
     "org.eclipse.jetty:jetty-util",
+    "org.eclipse.jetty.ee8:jetty-ee8-nested",
+    "org.eclipse.jetty.ee8:jetty-ee8-security",
+    "org.eclipse.jetty.ee8:jetty-ee8-servlet",
     "org.mockito:mockito-core",
     "org.objenesis:objenesis",
     "org.slf4j:slf4j-api",
@@ -98,13 +101,15 @@
         "org.commonmark:commonmark-ext-autolink:" + COMMONMARK_VERSION,
         "org.commonmark:commonmark-ext-gfm-strikethrough:" + COMMONMARK_VERSION,
         "org.commonmark:commonmark-ext-gfm-tables:" + COMMONMARK_VERSION,
-        "org.eclipse.jetty:jetty-continuation:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-http:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-io:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-security:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-server:" + JETTY_VERSION,
-        "org.eclipse.jetty:jetty-servlet:" + JETTY_VERSION,
+        "org.eclipse.jetty:jetty-session:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-util:" + JETTY_VERSION,
+        "org.eclipse.jetty.ee8:jetty-ee8-nested:" + JETTY_VERSION,
+        "org.eclipse.jetty.ee8:jetty-ee8-security:" + JETTY_VERSION,
+        "org.eclipse.jetty.ee8:jetty-ee8-servlet:" + JETTY_VERSION,
         "org.hamcrest:hamcrest:3.0",
         "org.mockito:mockito-core:5.21.0",
         "org.nibor.autolink:autolink:0.11.0",