Весенние ограничения загрузки при поддержке JSP
Для поддержки JSP Spring Boot поддерживает только метод войны упаковки и не поддерживает Fat Jar. См. Официальный документ: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations
Здесь Spring Boot официально говорит, что это проблема с Tomcat, но на самом деле он вызван тем, что сам Spring Boot изменил формат упаковки. См. Предыдущие статьи: http://www.vevb.com/article/141479.htm
В соответствии с исходной структурой Tomcat может сканировать ресурсы в рамках каталога META-INF/resources в жирной банке. После добавления BOOT-INF/classes Tomcat не может сканироваться.
Так как решить эту проблему? Вот решение для достижения поддержки JSP Spring Boot Fat Bar/Exploded Directory.
Персонализируйте Tomcat и добавьте Boot-Inf/классы в Resourcesset Tomcat
В Tomcat все отсканированные ресурсы будут размещены в так называемом ResourceSet . Например, META-INF/resources пакета JAR приложения в спецификации Servlet 3-это ResourceSet .
Теперь нам нужно найти способ добавить каталог BOOT-INF/classes Fat Jar, который поражен Spring Boot в ResourceSet .
Затем, внедрив интерфейс LifeCycLeListener в Tomcat, получите URL-адрес загрузки/классов в событии LifeCycle.configure_Start_event, а затем добавьте этот URL в WebResourceset.
/*** Добавьте основной класс Fat Jar/Exploded Directory в Tomcat ResourcesSet. * * @author hengyunabc 2017-07-29 * */public class staticresourceconfigurer реализует LifeCycleliStener {частный окончательный контекст; Staticresourceconfigurer (контекст контекста) {this.context = context; } @Override public void LifeCycleEvent (событие LifeCycleEvent) {if (event.getType (). Equals (lifecycle.configure_start_event)) {url location = this.getClass (). GetProtectionDomain (). GetCodesource (). GetLocation (); if (resourceutils.isfileurl (location)) {// при запуске в виде взорной строки каталога rootfile = location.getFile (); if (rootfile.endswith ("/boot-inf/classe/")) {rootfile = rootfile.substring (0, rootfile.length ()-"/boot-inf/classe/". length () + 1); } if (! new File (rootfile, "meta-inf" + file.separator + "resources"). isdirectory ()) {return; } try {location = new File (rootfile) .touri (). Tourl (); } catch (malformedurlexception e) {бросить новое allodalstateexception («не может добавить ресурсы Tomcat», e); }} Строка locationstr = location.tostring (); if (locationstr.endswith ("/boot-inf/classes!/")) {// при запуске как Fat Jar LocationStr = locationStr.substring (0, locationStr.length ()-"/boot-inf/classes!/". Length () + 1); try {location = new URL (locationstr); } catch (malformedurlexception e) {бросить новое allodalstateexception («не может добавить ресурсы Tomcat», e); / }}}Для того, чтобы сделать встроенный встроенный в Spring Tomcat нагрузку эту StaticResourceConfigurer, также требуется конфигурация EmbeddedServletContainerCustomizer:
Configuration @CondentalOnProperty (name = "tomcat.staticresourcustomizer.enabled", matchifmissing = true) public class tomcatconfiguration {@bean public intddedservletcontainercustomizer staticresourcecustomizer () {return New Embedservelcontainercorstomizer (). Настройка (ConfineMavelyEmbeddedServletContainer Container) {if (экземпляр контейнера с tomcatembeddesvletcontainerfactory) {((tomcatembeddedservletcontainerfactory) контейнер). context.addlifecyclelistener (new Staticresourceconfigurer (context)); }}}; }}Таким образом, Spring Boot может поддерживать ресурсы JSP в Fat Jar.
Демо-адрес: https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample
Суммировать
BOOT-INF/classes в Fat Jar/BOOT-INF/classes в Fat Bar StaticResourceConfigurer ResourceSet tomcatВыше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.