قيود التمهيد الربيع على دعم JSP
لدعم JSP ، يدعم SPRING BOOT طريقة الحرب فقط في الحرب ، ولا تدعم جرة الدهون. ارجع إلى المستند الرسمي: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations
هنا ، يقول Spring Boot رسميًا إنها مشكلة مع Tomcat ، ولكنها ناجمة بالفعل عن Boot Spring Poot نفسه تغيير تنسيق التغليف. الرجوع إلى المقالات السابقة: http://www.vevb.com/article/141479.htm
بموجب الهيكل الأصلي ، يمكن لـ Tomcat فحص الموارد بموجب دليل META-INF/resources في جرة الدهون. بعد إضافة BOOT-INF/classes ، لا يمكن لـ Tomcat مسحًا.
فكيف تحل هذه المشكلة؟ فيما يلي حل لتحقيق الدعم لدليل JSP of Spring Boot Fat Jar/Depted.
تخصيص tomcat وأضف فصول التمهيد إلى Tomcat's Resourceset
في Tomcat ، سيتم وضع جميع الموارد الممسوحة ضوئيًا في ما يسمى ResourceSet . على سبيل المثال ، META-INF/resources لحزمة جرة التطبيق في مواصفات Servlet 3 عبارة عن ResourceSet .
الآن نحتاج إلى إيجاد طريقة لإضافة دليل BOOT-INF/classes الخاص بجرة الدهون التي صدمتها الحذاء الربيعي إلى ResourceSet .
بعد ذلك ، من خلال تنفيذ واجهة LifecyCleListener لـ TomCat ، الحصول على عنوان URL لفئات Boot-INF في دورة Lifecycle.Configure_start_event ، ثم إضافة عنوان URL هذا إلى WebResourceset.
/*** أضف جرة فئة من الفئة الرئيسية/الدليل المنفجر إلى Tomcat Resourceset. * * Author Hengyunabc 2017-07-29 * */Public Class StaticResourCeConfigurer تنفذ LifecyCleListener {سياق السياق النهائي الخاص ؛ StaticResourCeConfigurer (سياق السياق) {this.context = context ؛ } Override public void lifecyclevent (lifecyclevent event) {if (event.gettype (). equals (lifecycle.configure_start_event)) {url location = th this.getClass (). getProtectionDomain (). getCodesource () if (ResourceUtils.isfileUrl (location)) {// عند تشغيلها كـ string string directory string roundfile = location.getFile () ؛ if (rootfile.endswith ("/boot-inf/classes/")) {rootfile = rootfile.substring (0 ، rootfile.length ()-"/classe/classes/". length () + 1) ؛ } if (! ملف جديد (rootfile ، "meta-inf" + file.separator + "الموارد"). isDirectory ()) {return ؛ } try {location = new file (rootfile) .touri (). tourl () ؛ } catch (malformedUrlexception e) {رمي جديد alficalstateException ("لا يمكن إضافة موارد tomcat" ، e) ؛ }} string socationStr = location.toString () ؛ if (solicationStr.endswith ("/boot-inf/classes!/")) {// عند تشغيله كـ jar solcationsstr = solicationStr.SubString (0 ، sitationstr.length ()-"/boot-inf/classes!/". length () + 1) ؛ حاول {location = url new (solicationStr) ؛ } catch (malformedUrlexception e) {رمي جديد alficalstateException ("لا يمكن إضافة موارد tomcat" ، e) ؛ }} this.context.getResources (). }}}من أجل جعل حذاء الربيع المدمج Tomcat تحميل هذا staticResourCeConfigurer ، مطلوب أيضًا تكوين intibedServletContainerCustomizer:
@configuration @intendalonproperty (name = "tomcat.staticResourCustomizer.enabled" ، matchifmissing = true) tomcatconfiguration class public {bread public serpedservletcontainercustomizer staticresourcustomizer () Customize (configableMedDedServletContainer Container) {if (container electionof tomcatembeddedServletContainerFactory) {((tomcatembeddedServletContainerFactory). context.addlifecyclelistener (New StaticResourCeConfigurer (Context)) ؛ }}} ؛ }}وبهذه الطريقة ، يمكن لـ Spring Boot دعم JSP Resources في Fat Jar.
العنوان التجريبي: https://github.com/hengyunabc/spring-boot-fat-jar-jsp-smapp
لخص
BOOT-INF/classes Fat Jar/BOOT-INF/classes في الجرة الدهنية StaticResourceConfigurer ResourceSet Tomcatما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.