Feder -Boot -Beschränkungen bei der JSP -Unterstützung
Für die Unterstützung von JSP unterstützt Spring Boot nur die Verpackungsmethode des Krieges und unterstützt Fat Jar nicht. Weitere Informationen finden Sie im offiziellen Dokument: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-anapplications.html#boot-features-jsp--Limitations
Hier sagt Spring Boot offiziell, dass es ein Problem mit Tomcat ist, aber es wird tatsächlich durch Spring -Boot selbst verursacht, das das Verpackungsformat ändert. Siehe frühere Artikel: http://www.vevb.com/article/141479.htm
Unter der ursprünglichen Struktur kann Tomcat Ressourcen unter dem META-INF/resources Verzeichnis im Fettglas scannen. Nach dem Hinzufügen von BOOT-INF/classes kann Tomcat nicht scannen.
Wie kann man dieses Problem lösen? Hier ist eine Lösung, um die Unterstützung des JSP von Spring Boot Fat Jar/Exploded Directory zu erhalten.
Personalisieren
In Tomcat werden alle gescannten Ressourcen in den sogenannten ResourceSet platziert. Beispielsweise ist META-INF/resources des Anwendungs-JAR-Pakets in der SERVLET 3-Spezifikation ein ResourceSet .
Jetzt müssen wir einen Weg finden, um das Verzeichnis BOOT-INF/classes des Fatglas hinzuzufügen, das ResourceSet vom Spring-Stiefel beeinflusst hat.
Wenn Sie die Lebenszyklelisten-Schnittstelle von Tomcat implementieren, erhalten Sie als Nächstes die URL von Boot-INF/Klassen im Ereignis von Lifecycle.Configure_Start_Event und fügen Sie diese URL dann zum Webresourceset hinzu.
/*** Fügen Sie die Hauptklasse Fat Jar/Exploded Directory in Tomcat Resourceset hinzu. * * @Author Hengyunabc 2017-07-29 * */Public Class staticresourceConfigurer implementiert Lifecyclelistener {privater Kontextkontext; StaticResourceConFigurer (Kontextkontext) {this.context = context; } @Override public void LifeCycleEvent (LifeCycleEvent Ereignis) {if (event.gettType (). Equals (LifeCycle.Configure_start_Event)) {url locum = this.getClass (). GetProtectionDomain (). GetCodesource (). GetLocation (); if (ressourcesUtils.isfileurl (Ort)) {// Wenn als explodierte Verzeichnis String rootfile = location.getFile () ausgeführt wird; if (rootFile.endswith ("/boot-inf/classes/")) {rootfile = rootfile.substring (0, rootfile.length ()-"/boot-inf/classes/". Länge () + 1); } if (! Neue Datei (rootfile, "meta-inf" + file.separator + "Ressourcen"). isDirectory ()) {return; } try {location = new Datei (rootfile) .touri (). tourl (); } catch (fehl Formaledurlexception e) {Wirf neu illegalStateException ("Kann Tomcat -Ressourcen nicht hinzufügen", e); }} String popositationStr = location.toString (); if (pospeationstr.endswith ("/boot-inf/classes!/") {// wenn als Fat Jar popositionstr. try {location = new URL (Standortstration); } catch (fehl Formaledurlexception e) {Wirf neu illegalStateException ("Kann Tomcat -Ressourcen nicht hinzufügen", e); }} this.context.getResources (). Createwebresourceset (ressourcenetType.resource_jar, "/", Ort, "/meta-inf/ressourcen"); }}}Um diese staticResourceConfiger eingebettet zu machen, ist eine eingebettete Konfiguration für staticResourceConfiger erforderlich:
@Configuration @ConditionalonProperty (name = "tomcat.staticResourceCustomizer.enabled", matchiFming = true) öffentliche Klasse TomcatConfiguration {@Bean public EmbeddeServletContainCustomizer staticResourcecustomizer () {{{{@overRid -voidedServletCustCustCustContainingContainingContaining - Customize (konfigurierbarembedededServletContainer -Container) {if (Containerinstanz von tomcatembeddedServletContainerFactory) {((tomcatembeddedServletContainFactory). context.addlifecyclelistener (new staticResourceConfigurer (Kontext)); }}}; }}Auf diese Weise kann Spring Boot JSP -Ressourcen in Fat Jar unterstützen.
Demo-Adresse: https://github.com/hengyunabc/spring-boot-jar-jsp--mampe
Zusammenfassen
BOOT-INF/classes in Fat Jar scannen kannStaticResourceConfigurer ResourceSet von Tomcat hinzufügen /BOOT-INF/classes im Fettglas hinzufügenDas obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.