Your dry-run shows how Jetty operates.
Let's break it down, so you understand it.
# Notice that your --lib= argument shows up here, at the start of the classpath.
# Everything below here is used by XmlConfiguration.
# These come from your ${jetty.base}/start.d/*.ini and any `[ini]` section in a ${jetty.home}/modules/*.mod that you have enabled.
# The list of XML to execute. Order of XML is important!
# These are executed to establish the core features of the Jetty server.
# Establish URLClassLoader entries for Environment.
# Properties used by this Environment "ee8" specifically.
# These XML operate under the classloader established by the Environment.
# If the XML references a class that doesn't exist in Environment "ee8" (or the parent classloader for core) then it's a ClassNotFoundException.
The original question you asked about "java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest", tells me that the command line you are using isn't satisfying the needs of the "ee8" environment on your jetty-home/jetty-base setup.
If we look at the command line you pasted in the original question, but split up ....
# JVM bin
C:\work\jdk/bin/java
# Arguments that are better put into the `jvm` module's configuration at ${jetty.base}/start.d/jvm.ini
-javaagent:C:\work\eService\lib\ext\com.volkhart.memory\measurer.jar
-Xms3584m
-Xmx3584m
-server
# Remove, this is a --lib= argument on start.jar instead.
# Or put it into a ${jetty.base}/start.d/egain.ini with the line
# --lib=C:\work\eService\lib\egpl_classpath_mf.jar
-classpath C:\work\eService\lib\egpl_classpath_mf.jar
# More lines for ${jetty.base}/start.d/jvm.ini
-Xrs
-XX:+UseStringDeduplication
-Xss256K
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=C:\work\eService\logs\
-Dcom.sun.identity.systemconfiguration=com.egain.platform.framework.federation.saml2.FedletConfigManager
-XX:+DisableExplicitGC
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=512m
-XX:MaxTenuringThreshold=2
-XX:SurvivorRatio=10
-XX:MaxNewSize=768m
-XX:NewSize=768m
# This is really strange, most of these should be no-ops, doing nothing useful on JVM 17+.
# Seeing as you have even the internal ASM exposed, are you attempting to walk the classes
# with ASM or Reflect in some way that would need ALL of these?
--add-opens=java.base/sun.security.ssl=ALL-UNNAMED
--add-opens=java.base/sun.util.calendar=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/sun.security.x509=ALL-UNNAMED
--add-opens=java.xml/javax.xml.datatype=ALL-UNNAMED
--add-opens=java.xml/com.sun.org.apache.xerces.internal.jaxp.datatype=ALL-UNNAMED
--add-opens=java.xml/com.sun.org.apache.xml.internal.serialize=ALL-UNNAMED
--add-opens=java.sql/javax.sql=ALL-UNNAMED
--add-opens=java.logging/java.util.logging=ALL-UNNAMED
--add-opens=java.desktop/javax.imageio=ALL-UNNAMED
--add-opens=java.naming/javax.naming=ALL-UNNAMED
--add-opens=java.rmi/java.rmi=ALL-UNNAMED
--add-opens=java.management/java.lang.management=ALL-UNNAMED
--add-opens=java.scripting/javax.script=ALL-UNNAMED
--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED
--add-opens=java.sql/java.sql=ALL-UNNAMED
# More things for ${jetty.base}/start.d/egain.ini
-DINSTALL_DIR=C:\work\eService
-DINSTALL_DIR_LOCAL=C:\work\eService
# More for ${jetty.base}/start.d/jvm.ini
-Djava.net.preferIPv4Stack=true
-Djava.security.policy=C:\work\eService\bin\platform\windows\egpl_system.policy
-Djava.rmi.activation.port=15099
-
Deg.host.name=
ussuhvin0135.egeng.info-Djava.library.path=C:\work\eService\lib\dlls
-Deg.is.local.fs=false
-Djdk.tls.trustNameService=true
-Dorg.bouncycastle.rsa.allow_multi_use=true
-Djavax.net.ssl.trustStoreProvider=BCFIPS
-Djavax.net.ssl.trustStoreType=PKCS12
-Djavax.net.ssl.trustStorePassword=
-Djdk.tls.client.protocols=TLSv1.2
-Djdk.tls.server.protocols=TLSv1.2
-Dhttps.protocols=TLSv1.2
-Xlog:gc=info,phases=info,age=info,marking=info,ref=info:file=\"C:\work\eService\logs\eg_log_ussuhvin0135.egeng.info_printgc.log\":time,uptime:filecount=100,filesize=5m
-Dderby.system.home=C:\work\eService
-Dderby.stream.error.file=C:\work\eService\logs
-Dapp.http.port=9001
-Dapp.https.port=9001
# These belong in ${jetty.base}/start.d/ssl.ini
-Djetty.ssl.port=9001
# These belong in ${jetty.base}/start.d/ssl-context.ini
# These paths MUST be absolute paths.
-Djetty.sslContext.keyStorePath=../../../jks/ussuhvin0135.egeng.info.ks
-Djetty.sslContext.trustStorePath=../../jdk/lib/security/cacerts
-Djetty.sslContext.provider=BCJSSE
-Djetty.sslContext.keyStoreProvider=BCFIPS
-Djetty.sslContext.trustStoreProvider=BCFIPS
# This belongs in ${jetty.base}/start.d/jvm.ini
-Dhazelcast.io.selectorMode="selectwithfix"
# These are properties after start.jar or for XmlConfiguration, not JVM System Properties.
-DSTOP.PORT=15095
-DSTOP.KEY=egain_jetty
# More for ${jetty.base}/start.d/jvm.ini
-Dsun.net.http.allowRestrictedHeaders=true
# This property doesn't exist anywhere in Jetty 12
-Djetty.requestlog.loglatency=true
# You don't have the console-capture module enabled, this is an unused property.
-Djetty.console-capture.dir=C:\work\jetty/logs/
# This belongs in ${jetty.base}/start.d/requestlog.ini
# It MUST be an absolute path as well.
-Djetty.requestlog.filePath=../../eService/logs/eg_log_ussuhvin0135.egeng.info_yyyy_mm_dd.request.log
# This is a duplicate from above, and belongs in ${jetty.base}/start.d/http.ini
-Djetty.http.port=9001
# This is fine as a System Property, but doesn't really need to be defined.
# What's more important is that your PWD or CWD is the ${jetty.base} directory.
-Djetty.base=C:\work\jetty\jettybase
# These are not System Properties, but rather are Context (WebAppContext or ServletContextHandler) attributes
-Dorg.eclipse.jetty.server.Request.maxFormContentSize=2000000000
-Dorg.eclipse.jetty.server.Request.maxFormKeys=10000
# This belongs in ${jetty.base}/start.d/http-forwarded.ini
-Djetty.httpConfig.forwardedPortAsAuthority=false
# Put this in ${jetty.base}/start.d/egain.ini as a -D<key>=<value> entry
-Degain.processname=ApplicationServer
# These belong in ${jetty.base}/start.d/http.ini
-Djetty.http.acceptors=8
-Djetty.http.selectors=8
-Djetty.http.acceptQueueSize=250
# These belong in ${jetty.base}/start.d/threadpool.ini
-Djetty.threadPool.minThreads=10
-Djetty.threadPool.maxThreads=750
# This is the jar containing the main-class for bootstrap
-jar C:\work\jetty\start.jar
# Put this in ${jetty.base}/start.d/egain.ini
--lib=C:\work\eService\lib\egpl_classpath_mf.jar
# This only does start bootstrap debug, not Jetty runtime debug.
--debug
# If you actually had console-capture enabled, this wouldn't be needed.
# Also, if you DO have console-capure enabled, this MUST be removed (it's a console loop otherwise)
> out.txt 2>&1
If you follow this advice, your command line, when using start.jar, will be tiny.
Optionally, you can make these changes, and then use the output from --dry-run to run your environment in a clean way.