tree 05cf925eb0b74629b6acd5d9b91d5d054944f1a7
parent e1ace85515ef8b6651a724e478c4bd2347e44fba
author David Ostrovsky <david@ostrovsky.org> 1780460023 +0200
committer David Ostrovsky <david@ostrovsky.org> 1781275241 -0700

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
