亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

深入Spring Boot實現對Fat Jar jsp的支持

2024-07-14 08:41:09
字體:
來源:轉載
供稿:網友

spring boot 對于jsp支持的限制

對于jsp的支持,Spring Boot官方只支持了war的打包方式,不支持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自己改變了打包格式引起的。

原來的結構之下,tomcat是可以掃描到fat jar里的META-INF/resources目錄下面的資源的。在增加了BOOT-INF/classes之后,則tomcat掃描不到了。

那么怎么解決這個問題呢?下面給出一種方案,來實現對spring boot fat jar/exploded directory的jsp的支持。

個性化配置tomcat,把BOOT-INF/classes 加入tomcat的ResourceSet

在tomcat里,所有掃描到的資源都會放到所謂的ResourceSet里。比如servlet 3規范里的應用jar包的META-INF/resources就是一個ResourceSet。

現在需要想辦法把spring boot打出來的fat jar的BOOT-INF/classes目錄加到ResourceSet里。

下面通過實現tomcat的 LifecycleListener接口,在Lifecycle.CONFIGURE_START_EVENT事件里,獲取到BOOT-INF/classes的URL,再把這個URL加入到WebResourceSet里。

/** * Add main class fat jar/exploded directory into tomcat ResourceSet. * * @author hengyunabc 2017-07-29 * */public class StaticResourceConfigurer implements LifecycleListener { private final Context context; StaticResourceConfigurer(Context context) {  this.context = context; } @Override public void lifecycleEvent(LifecycleEvent event) {  if (event.getType().equals(Lifecycle.CONFIGURE_START_EVENT)) {   URL location = this.getClass().getProtectionDomain().getCodeSource().getLocation();   if (ResourceUtils.isFileURL(location)) {    // when run as exploded directory    String rootFile = location.getFile();    if (rootFile.endsWith("/BOOT-INF/classes/")) {     rootFile = rootFile.substring(0, rootFile.length() - "/BOOT-INF/classes/".length() + 1);    }    if (!new File(rootFile, "META-INF" + File.separator + "resources").isDirectory()) {     return;    }    try {     location = new File(rootFile).toURI().toURL();    } catch (MalformedURLException e) {     throw new IllegalStateException("Can not add tomcat resources", e);    }   }   String locationStr = location.toString();   if (locationStr.endsWith("/BOOT-INF/classes!/")) {    // when run as fat jar    locationStr = locationStr.substring(0, locationStr.length() - "/BOOT-INF/classes!/".length() + 1);    try {     location = new URL(locationStr);    } catch (MalformedURLException e) {     throw new IllegalStateException("Can not add tomcat resources", e);    }   }   this.context.getResources().createWebResourceSet(ResourceSetType.RESOURCE_JAR, "/", location,     "/META-INF/resources");  } }}

為了讓spring boot embedded tomcat加載這個 StaticResourceConfigurer,還需要一個EmbeddedServletContainerCustomizer的配置:

@Configuration@ConditionalOnProperty(name = "tomcat.staticResourceCustomizer.enabled", matchIfMissing = true)public class TomcatConfiguration { @Bean public EmbeddedServletContainerCustomizer staticResourceCustomizer() {  return new EmbeddedServletContainerCustomizer() {   @Override   public void customize(ConfigurableEmbeddedServletContainer container) {    if (container instanceof TomcatEmbeddedServletContainerFactory) {     ((TomcatEmbeddedServletContainerFactory) container)       .addContextCustomizers(new TomcatContextCustomizer() {        @Override        public void customize(Context context) {         context.addLifecycleListener(new StaticResourceConfigurer(context));        }       });    }   }  }; }}

 這樣子的話,spring boot就可以支持fat jar里的jsp資源了。

demo地址: https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample

總結

  1. spring boot改變了打包結構,導致tomcat沒有辦法掃描到fat jar里的/BOOT-INF/classes
  2. 通過一個StaticResourceConfigurer把fat jar里的/BOOT-INF/classes加到tomcat的ResourceSet來解決問題

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美一区二区三区四区| 欧美与黑人午夜性猛交久久久| 97香蕉超级碰碰久久免费的优势| 一本色道久久综合亚洲精品小说| 日韩欧美在线国产| 亚洲男人天堂网| 欧美在线视频免费观看| 精品国产一区av| 欧美国产精品日韩| 九九热99久久久国产盗摄| 日本在线精品视频| 欧美成人久久久| 国产免费成人av| 精品视频在线观看日韩| 欧美黑人xxx| 久久精品视频亚洲| 91中文字幕一区| 亚洲欧美日韩一区二区三区在线| 久久最新资源网| 95av在线视频| 最新日韩中文字幕| 91网站免费看| 亚洲欧美另类中文字幕| 精品一区二区三区电影| 午夜精品久久久久久久男人的天堂| 91免费版网站入口| 亚洲三级黄色在线观看| 欧美俄罗斯性视频| 亚洲色图13p| 欧洲永久精品大片ww免费漫画| 日韩激情片免费| 18一19gay欧美视频网站| 国产亚洲精品综合一区91| 国产精品自产拍高潮在线观看| 久久在线视频在线| 久久精品国产久精国产思思| 97精品久久久中文字幕免费| 日韩av免费看| 欧美一区二区三区免费视| 欧美日韩另类视频| 在线成人激情视频| 国产精品国模在线| 日韩中文字幕视频在线| 992tv在线成人免费观看| 91精品久久久久久久久久久久久| 成人av色在线观看| 亚洲国产精品va| 啪一啪鲁一鲁2019在线视频| 亚洲精品国产福利| 久久精品国产综合| 亚洲高清免费观看高清完整版| 在线播放精品一区二区三区| 国产精品久久久久久久久久久久久久| 欧美日韩国产精品专区| 国产欧美日韩中文字幕在线| 日韩理论片久久| 91国内揄拍国内精品对白| 欧美精品在线观看91| 欧美日韩国产在线看| 久久人人爽人人爽爽久久| 国产精品免费久久久久影院| 国产精品免费观看在线| 色多多国产成人永久免费网站| 国产成人精品综合久久久| 国产91热爆ts人妖在线| 久久亚洲精品视频| 久久久久久久爱| 92版电视剧仙鹤神针在线观看| 欧美综合国产精品久久丁香| 国产91九色视频| 久久999免费视频| 日日骚av一区| 久久精品视频va| 久久亚洲国产成人| 亚洲国产高清高潮精品美女| 91成品人片a无限观看| 欧美一区二区大胆人体摄影专业网站| 欧美刺激性大交免费视频| 欧美另类69精品久久久久9999| 中文字幕亚洲一区二区三区五十路| 亚洲国产高清福利视频| 曰本色欧美视频在线| 欧美高清在线视频观看不卡| 91精品国产免费久久久久久| 中文字幕亚洲欧美一区二区三区| 亚洲欧美国产日韩天堂区| 亚洲人成网站免费播放| 亚洲免费精彩视频| 欧美丝袜一区二区| 国产成人av在线| 欧美午夜性色大片在线观看| 2019亚洲男人天堂| 欧美性做爰毛片| 国产精品日韩久久久久| 中文字幕一精品亚洲无线一区| 热99精品只有里视频精品| 激情成人中文字幕| 欧美一级在线亚洲天堂| 欧美专区在线观看| 国产精品视频一区二区高潮| 国产精品激情av电影在线观看| 亚洲伊人久久大香线蕉av| 亚洲精品成a人在线观看| 精品国产老师黑色丝袜高跟鞋| 亚洲人成77777在线观看网| xxxxx成人.com| 日韩黄色在线免费观看| 夜色77av精品影院| 欧美日韩中文在线| 久久久精品久久久久| 91产国在线观看动作片喷水| 成人免费视频在线观看超级碰| 久久国产精品久久国产精品| 欧美日韩另类视频| 亚洲精品av在线| 黑人巨大精品欧美一区二区| 欧美激情xxxx| 日韩免费在线电影| 国产精自产拍久久久久久| 亚洲欧美国产日韩天堂区| 亚洲成人久久久久| 精品久久久一区| 中文字幕久热精品在线视频| 青青精品视频播放| 97人洗澡人人免费公开视频碰碰碰| 影音先锋日韩有码| 亚洲最大在线视频| 91精品国产91久久久久久最新| 国产成人精品优优av| 久久躁狠狠躁夜夜爽| 亚洲影视九九影院在线观看| 91九色国产社区在线观看| 日本欧美爱爱爱| 超薄丝袜一区二区| 国产精品一区二区电影| 最近中文字幕2019免费| 亚洲va欧美va在线观看| 亚洲精品av在线播放| 久久精品福利视频| 日本久久中文字幕| 欧美日韩免费一区| 日韩成人在线播放| 日韩精品极品视频| 欧美在线观看网址综合| 日韩电影中文 亚洲精品乱码| 久久久精品国产一区二区| 亚洲性视频网站| 欧美日韩亚洲一区二区三区| 中文字幕在线成人| 国产精品久久久久久久久粉嫩av| 国产原创欧美精品| 日韩精品在线观看一区二区| 中文字幕视频一区二区在线有码| 一道本无吗dⅴd在线播放一区| 久久久久久久久久av| 欧美电影免费看| 国产成人精品av在线| 日韩精品久久久久久久玫瑰园| 日韩理论片久久| www.久久色.com| 欧美中文在线免费| 日韩男女性生活视频| 日韩欧美亚洲范冰冰与中字| 中文字幕日本精品|