У нас есть приложение Java, которое загружается с помощью Spring WebApplicationInitializer на Jetty 9.2:
2019-07-11 09:52:18.464:INFO:oejs.Server:main: jetty-9.2.17.v20160517
2019-07-11 09:52:18.487:INFO:oejs.AbstractNCSARequestLog:main: Opened /apps/jetty/servers/erti/logs/2019_07_10.request.log
2019-07-11 09:52:18.491:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/apps/jetty/servers/erti/contexts/] at interval 1
2019-07-11 09:52:18.522:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.ContextHandler@446e7065{/hb,null,AVAILABLE}
2019-07-11 09:52:25.437:INFO:/services/information-requests:main: 1 Spring WebApplicationInitializers detected on classpath
2019-07-11 09:52:26.694:INFO:/services/information-requests:main: Initializing Spring root WebApplicationContext
Однако, если мы обновимся до Jetty 9.4, WebApplicationInitializer не будет поднят, и каждая страница получит 404 (хотя статические ресурсы все еще видны):
2019-07-11 09:55:22.915:WARN:oejx.XmlConfiguration:main: Property 'jetty.deploy.monitoredDirName' is deprecated, value from 'jetty.deploy.monitoredDir' used
2019-07-11 09:55:22.956:WARN:oejx.XmlConfiguration:main: Property 'jetty.port' is deprecated, value from 'jetty.http.port' used
2019-07-11 09:55:22.988:WARN:oejx.XmlConfiguration:main: Property 'jetty.keystore.password' is deprecated, use 'jetty.sslContext.keyStorePassword' instead
2019-07-11 09:55:22.990:WARN:oejx.XmlConfiguration:main: Property 'jetty.keymanager.password' is deprecated, use 'jetty.sslContext.keyManagerPassword' instead
2019-07-11 09:55:22.990:WARN:oejx.XmlConfiguration:main: Property 'jetty.truststore.password' is deprecated, use 'jetty.sslContext.trustStorePassword' instead
2019-07-11 09:55:23.069:INFO:oejs.Server:main: jetty-9.4.11.v20180605; built: 2018-06-05T18:24:03.829Z; git: d5fc0523cfa96bfebfbda19606cad384d772f04c; jvm 1.8.0_172-b11
2019-07-11 09:55:23.089:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///apps/jetty/servers/erti/contexts/] at interval 1
2019-07-11 09:55:23.131:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.ContextHandler@191c6e13{/hb,null,AVAILABLE}
Существует ли какой-либо конкретный модуль Jetty, который нам нужно включить для получения ServletContainerInitializer
экземпляров? У меня сложилось впечатление, что ServletContainerInitializer является довольно стандартным начиная с Servlet 3.0, а Jetty 9.4 использует 3.1. Или, может быть, нужно что-то еще, чтобы инициализатор контейнера Spring обнаружил наш WebApplicationInitializer?
Jetty 9.4 сообщает следующее:
Enabled Modules:
================
0) mail transitive provider of mail for jndi
1) resources ${jetty.base}/start.d/start.ini
2) threadpool transitive provider of threadpool for server
init template available with --add-to-start=threadpool
3) server transitive provider of server for http
transitive provider of server for plus
transitive provider of server for ssl
transitive provider of server for security
transitive provider of server for servlet
transitive provider of server for requestlog
transitive provider of server for jndi
init template available with --add-to-start=server
4) jndi transitive provider of jndi for plus
5) security transitive provider of security for webapp
transitive provider of security for plus
6) transactions transitive provider of transactions for plus
7) servlet transitive provider of servlet for webapp
transitive provider of servlet for jsp
8) webapp transitive provider of webapp for plus
transitive provider of webapp for deploy
init template available with --add-to-start=webapp
9) plus transitive provider of plus for annotations
10) annotations ${jetty.base}/start.d/start.ini
11) apache-jsp transitive provider of apache-jsp for jsp
12) console-capture ${jetty.base}/start.d/start.ini
13) deploy ${jetty.base}/start.d/start.ini
14) http ${jetty.base}/start.d/start.ini
15) ssl transitive provider of ssl for https
init template available with --add-to-start=ssl
16) https ${jetty.base}/start.d/start.ini
17) jsp ${jetty.base}/start.d/start.ini
18) requestlog ${jetty.base}/start.d/start.ini
И наше приложение разворачивается с использованием файла контекста Jetty:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/services/information-requests</Set>
<Set name="war"><Property name="jetty.base" default="."/>/webapps/erti.war</Set>
<Set name="extraClasspath">/apps/config/erti/</Set>
<!-- Turn off JSESSIONID appearing in URL-->
<Call name="setInitParameter">
<Arg>org.eclipse.jetty.servlet.SessionIdPathParameterName</Arg>
<Arg>none</Arg>
</Call>
</Configure>