Restricciones de arranque de primavera en el soporte de JSP
Para el soporte de JSP, Spring Boot solo admite el método de envasado de guerra y no admite Fat Jar. Consulte el documento oficial: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-feature-jsp-limitations
Aquí, Spring Boot dice oficialmente que es un problema con Tomcat, pero en realidad es causado por Spring Boot en sí cambia el formato de embalaje. Consulte los artículos anteriores: http://www.vevb.com/article/141479.htm
Según la estructura original, Tomcat puede escanear recursos bajo el directorio META-INF/resources en el frasco de grasa. Después de agregar BOOT-INF/classes , TomCat no puede escanear.
Entonces, ¿cómo resolver este problema? Aquí hay una solución para lograr el soporte para el JSP del directorio de grasa de arranque de primavera/directorio explotado.
Personalice Tomcat y agregue Boot-Inf/Classes al recursos de Tomcat
En Tomcat, todos los recursos escaneados se colocarán en el llamado ResourceSet . Por ejemplo, META-INF/resources del paquete JAR de aplicación en la especificación Servlet 3 es un ResourceSet .
Ahora necesitamos encontrar una manera de agregar el directorio de BOOT-INF/classes del frasco grueso que es golpeado por Spring Boot al ResourceSet .
A continuación, al implementar la interfaz LifecyClelistener de TomCat, obtenga la URL de Boot-Inf/classes en el evento Lifecycle.configure_start_event, y luego agregue esta URL a WebResourceSet.
/*** Agregue el directorio de Jar/Explotado de clase principal a Tomcat Resourcess. * * @author Hengyunabc 2017-07-29 * */public class staticResourCeconfigurer implementa lifecyClelistener {contexto de contexto final privado; StaticResourCeConfigurer (contexto de contexto) {this.context = context; } @Override public void LifeCycleEvent (LifeCycleEvent Event) {if (event.gettype (). Equals (lifecycle.configure_start_event)) {url ubicación = this.getClass (). GetProtectionDomain (). GetCodeSource (). GetLocation ();; if (resourceUtilS.IsfileUrl (ubicación)) {// Cuando se ejecuta como directorio explosivo string rootFile = ubicación.getFile (); if (rootFile.endSwith ("/Boot-Inf/classes/")) {rootFile = rootFile.Substring (0, rootFile.length ()-"/boot-inf/classes/". longitud () + 1); } if (! new File (rootFile, "meta -inf" + file.separator + "recursos"). isDirectory ()) {return; } try {ubicación = nuevo archivo (rootfile) .touri (). tourl (); } Catch (MalFormedUrexception e) {arrojar nueva IllegalStateException ("no puede agregar recursos de Tomcat", e); }} String ubatatstr = ubicación.ToString (); if (ubatatstr.endswith ("/boot-inf/classes!/")) {// Cuando se ejecuta como fat jar ubationtr = lugarstr.substring (0, lugartratstr.length ()-"/boot-inf/classes!/". longitud () + 1); Pruebe {ubicación = new URL (ubicationTr); } Catch (MalFormedUrexception e) {arrojar nueva IllegalStateException ("no puede agregar recursos de Tomcat", e); }} this.context.getResources (). CreateWeBreseurceset (ResourcesStype.Resource_jar, "/", ubicación, "/metainf/recursos"); }}}Para hacer la carga de Tomcat de arranque de primavera esta staticresourceconfigurer, también se requiere una configuración IncreddedServletContainerCustomizer:
@Configuration @condyalonProperty (name = "tomcat.staticResourCeCustomizer.enabled", matchifMissing = true) clase pública TomcatConfiguration {@Bean public IncredDedServletContainerCustomizer staticResourCeCustomizer () Personalize (Configurar Container) {((TomCatEmbedDedServletContainFactory). ContextyConteAnerRers (contexate) {{ @ @{ @ @{ @ @{ @{ @ @{{ @ @ @{ @{ @{ @{ @{ @{ @{ @{ @{ @{ @{ @{ @{ @{ @{ @ConteoleCustorizers (contex CanedDEDContainer (conteoide CONTENELECFATORIO DE CONTEN en contenedor). context.AddlifecyClelistener (new staticResourCeconfigurer (context)); }}}; }}De esta manera, Spring Boot puede soportar los recursos JSP en Fat Jar.
Dirección de demostración: https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample
Resumir
BOOT-INF/classes en fat jar/BOOT-INF/classes en el frasco de grasa StaticResourceConfigurer ResourceSet de TomcatLo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.