diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc index e9874167b74..422927dc32f 100644 --- a/spring-boot-docs/src/main/asciidoc/howto.adoc +++ b/spring-boot-docs/src/main/asciidoc/howto.adoc @@ -574,7 +574,7 @@ Tomcat 8 for it to work. For example, using the starter poms in Maven: [source,xml,indent=0,subs="verbatim,quotes,attributes"] ---- - 8.0.3 + 8.0.8 ... diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/JasperInitializerLifecycleListener.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/JasperInitializerLifecycleListener.java index 8b9ab4d4f03..6a7e107c782 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/JasperInitializerLifecycleListener.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/JasperInitializerLifecycleListener.java @@ -1,8 +1,13 @@ package org.springframework.boot.context.embedded.tomcat; +import javax.servlet.ServletContainerInitializer; +import javax.servlet.ServletException; + +import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleListener; -import org.springframework.boot.context.embedded.ServletContextInitializer; +import org.apache.catalina.core.StandardContext; +import org.springframework.util.Assert; import org.springframework.util.ClassUtils; /** @@ -15,29 +20,35 @@ class JasperInitializerLifecycleListener implements LifecycleListener { private static final String JASPER_INITIALIZER_CLASS = "org.apache.jasper.servlet.JasperInitializer"; - private final ServletContextInitializerLifecycleListener delegate; + private ServletContainerInitializer initializer; public JasperInitializerLifecycleListener() { - ServletContextInitializer initializer = getJasperInitializer(); - if (initializer != null) { - this.delegate = new ServletContextInitializerLifecycleListener(initializer); - } - else { - this.delegate = null; - } + this.initializer = getJasperInitializer(); } @Override public void lifecycleEvent(LifecycleEvent event) { - if (this.delegate != null) { - this.delegate.lifecycleEvent(event); + if (this.initializer != null + && Lifecycle.CONFIGURE_START_EVENT.equals(event.getType())) { + onStartup(event); } } - private ServletContextInitializer getJasperInitializer() { + private void onStartup(LifecycleEvent event) { + Assert.isInstanceOf(StandardContext.class, event.getSource()); + StandardContext standardContext = (StandardContext) event.getSource(); + try { + this.initializer.onStartup(null, standardContext.getServletContext()); + } + catch (ServletException ex) { + throw new IllegalStateException(ex); + } + } + + private ServletContainerInitializer getJasperInitializer() { try { Class jasperClass = ClassUtils.forName(JASPER_INITIALIZER_CLASS, null); - return (ServletContextInitializer) jasperClass.newInstance(); + return (ServletContainerInitializer) jasperClass.newInstance(); } catch (Exception ex) { return null;