Statik kontent
Standart bo'yicha Spring Boot statik kontentni /static (yoki /public yoki /resources, yoki /META-INF/resources) katalogidan yuklaydi, yoki ServletContextning ildizidan. Framework ResourceHttpRequestHandler'ni Spring MVC'dan ishlatadi, shuning uchun siz o'zingizning WebMvcConfigurer ni qo'shib va addResourceHandlers metodini qayta yozib, bu ishlash mantiqini o'zgartirishingiz mumkin.
Avtonom veb-ilovada standart servlet konteynerdan faollashtirilgan emas. Uni server.servlet.register-default-servlet xususiyati yordamida faollashtirish mumkin.
Standart servlet zaxira varianti sifatida ServletContextning ildizidan kontentni qayta ishlaydi, agar Spring uni qayta ishlamasa. Ko'pincha bu sodir bo'lmaydi (standart MVC konfiguratsiyasini o'zgartirmagan bo'lsangiz), chunki Spring har doim so'rovlarni DispatcherServlet yordamida qayta ishlashga qodir.
Standart bo'yicha resurslar /**ga xaritalanadi, lekin bu xaritalashni "spring.mvc.static-path-pattern" xususiyati orqali nozik sozlash mumkin. Masalan, barcha resurslarni /resources/** ga ko'chirish quyidagicha amalga oshiriladi:
spring.mvc.static-path-pattern=/resources/**
spring:
mvc:
static-path-pattern: "/resources/**"
Siz, shuningdek, statik resurslarni joylashishini "spring.web.resources.static-locations" xususiyati yordamida sozlashingiz mumkin (standart qiymatlarni katalog joylashuvlari ro'yxatiga o'zgartirib). Servlet konteksti ildiz yo'li, "/", joylashuv sifatida avtomatik ravishda qo'shiladi.
Ilgari aytib o'tilgan "standart" statik resurs joylashuvlaridan tashqari, maxsus joy Webjars kontenti uchun ajratilgan. /webjars/** yo'lli har qanday resurslar, agar ular Webjars formatida joylangan bo'lsa, jar-fayllardan qayta ishlanadi.
src/main/webapp katalogini ishlatmang. Bu katalog keng qabul qilingan standart bo'lsa-da, u faqat war paketlash bilan ishlaydi va agar jar-fayl ishlab chiqarilgan bo'lsa, u aksariyat qurilish asboblari tomonidan jim to'xtatiladi.
Spring Boot Spring MVC tomonidan taqdim etilgan resurslar bilan kengaytirilgan ishlash funksionalitesini ham qo'llab-quvvatlaydi, bu esa statik resurslarning keshini o'chirib qo'yish yoki Webjars URL-larini versiya bilan bog'liq holda ishlatish kabi stsenariylarga imkon beradi.
Webjars URL-larini versiyalarga bog'liq holda ishlatish uchun webjars-locator-core ni qo'shing. So'ngra Webjaringizni e'lon qiling. Jquery misolida "/webjars/jquery/jquery.min.js" ni qo'shish "/webjars/jquery/x.y.z/jquery.min.js" ga olib keladi, bu erda x.y.z Webjar versiyasi.
webjars-locator-jboss-vfs ni
webjars-locator-core o'rniga e'lon qilish kerak bo'ladi. Aks holda barcha Webjars
404 sifatida hal qilinadi.
Keshni o'chirish funksiyasini ishlatish uchun quyidagi konfiguratsiyada barcha statik resurslarni o'chirish uchun kontent xeshini, masalan <link href="/css/spring-2a2d595e6ed9a0b24f027f2b63b134d6.css"/>, URLga qo'shib o'chirishga yechim berilgan:
spring.web.resources.chain.strategy.content.enabled=true
spring.web.resources.chain.strategy.content.paths=/**
spring:
web:
resources:
chain:
strategy:
content:
enabled: true
paths: "/**"
ResourceUrlEncodingFilter tufayli qayta yoziladi, ular avtomatik ravishda Thymeleaf va FreeMarker uchun konfiguratsiya qilinadi. JSP ishlatishda bu filtrni qo'lda e'lon qilish kerak. Boshqa shablonlashtiruvchilar hozirda avtomatik ravishda qo'llab-quvvatlanmaydi, lekin ularni qo'llab-quvvatlash mos shablon makroslari/yordamchi sinflari va
ResourceUrlProvider'dan foydalanish orqali ta'minlanishi mumkin.
Resurslarni dinamik tarzda yuklashda, masalan JavaScript modullar yuklagichi yordamida, fayllar nomini o'zgartirish mumkin emas. Shu sababli boshqa strategiyalar qo'llab-quvvatlanadi va kombinatsiyalangan holda ishlatilishi mumkin. "Fiksli" strategiyasi fayl nomini o'zgartirmasdan URLga statik versiya satrini qo'shadi, quyidagi misolda ko'rsatilgani kabi:
spring.web.resources.chain.strategy.content.enabled=true
spring.web.resources.chain.strategy.content.paths=/**
spring.web.resources.chain.strategy.fixed.enabled=true
spring.web.resources.chain.strategy.fixed.paths=/js/lib/
spring.web.resources.chain.strategy.fixed.version=v12
spring:
web:
resources:
chain:
strategy:
content:
enabled: true
paths: "/**"
fixed:
enabled: true
paths: "/js/lib/"
version: "v12"
Bu konfiguratsiyada "/js/lib/" katalogida joylashgan JavaScript modullari fiksli versiyalash strategiyasini ("/v12/js/lib/mymodule.js") ishlatadi, aks holda qolgan resurslar kontentga asoslangan strategiyani (<link href="/css/spring-2a2d595e6ed9a0b24f027f2b63b134d6.css"/>) ishlatishda davom etadi.
Qo'shimcha qo'llab-quvvatlanadigan opsiyalar haqida WebProperties.Resourcesda ko'proq ma'lumotga ega bo'ling.
Bu funksiya maxsus blog postida va Spring Framework'ning ma'lumotnoma dokumentatsiyasida batafsil tasvirlangan.
Bosh sahifa
Spring Boot statik va shablonlangan bosh sahifalarni qo'llab-quvvatlaydi. Dastlab framework index.html faylini statik kontentning konfiguratsiyalangan joylashuvlarida qidiradi. Agar bunday shablon topilmasa, u index shablonini qidiradi. Agar ularning biri topilsa, u avtomatik ravishda ilovaning bosh sahifasi sifatida ishlatiladi.
Kastom Favicon
Boshqa statik resurslar bilan bir xil bo'lgani kabi, Spring Boot favicon.ico faylining statik kontentning konfiguratsiyalangan joylashuvlarida mavjudligini tekshiradi. Agar bunday fayl mavjud bo'lsa, u avtomatik ravishda ilovaning veb-sahifa belgisining (favicon) sifatida ishlatiladi.
Yo'llarni moslashtirish va kontentni kelishtirish
Spring MVC HTTP so'rovlarini qayta ishlovchilarga yo'naltirish uchun u so'rov yo'lini ko'rib chiqib, uni ilovada belgilangan harakatlar bilan (masalan, controller metodlari uchun @GetMapping annotatsiyalari) moslashtirishi mumkin.
Spring Boot odatda suffiks naqshlarini moslashtirishni o'chiradi, ya'ni "GET /projects/spring-boot.json" turidagi so'rovlar @GetMapping("/projects/spring-boot") bilan moslashmaydi. Bu Spring MVC ilovalari uchun eng optimal usul deb hisoblanadi. Avvalgi paytlarda bu funksiya asosan HTTP mijozlari uchun foydali edi, chunki ular "Accept" so'rov sarlavhalarini to'g'ri yubora olishmadi; mijozga to'g'ri kontent turini yuborilganligiga ishonch hosil qilish kerak edi. Hozirgi vaqtda kontent kelishtirish ancha ishonchli bo'ldi.
"Accept" so'rov sarlavhalarini doimo to'g'ri yubormaydigan HTTP mijozlari bilan ishlashning boshqa usullari ham mavjud. Naqshlarga moslashtirish o'rniga, so'rov parametrlari orqali "GET /projects/spring-boot?format=json" kabi so'rovlarni @GetMapping("/projects/spring-boot") bilan aniq moslashishga imkon beruvchi so'rov parametridan foydalanishingiz mumkin:
spring.mvc.contentnegotiation.favor-parameter=true
spring:
mvc:
contentnegotiation:
favor-parameter: true
Yoki agar siz boshqa parametr nomidan foydalanishni afzal ko'rsangiz:
spring.mvc.contentnegotiation.favor-parameter=true
spring.mvc.contentnegotiation.parameter-name=myparam
spring:
mvc:
contentnegotiation:
favor-parameter: true
parameter-name: "myparam"
Ko'pchilik standart media turi platformalari "qutidan tashqarida" qo'llab-quvvatlanadi, lekin siz yangilarini ham belgilashingiz mumkin, masalan:
spring.mvc.contentnegotiation.media-types.markdown=text/markdown
spring:
mvc:
contentnegotiation:
media-types:
markdown: "text/markdown"
Suffiks naqshlarini moslashtirish eskirgan va kelajakdagi nashrlarda olib tashlanadi. Agar sizga barcha ogohlantirishlar tushunarli bo'lsa va ilovangiz suffiks naqshlarini moslashtirishni ishlatishni davom ettirishni istasangiz, quyidagi konfiguratsiyani bajaring:
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-suffix-pattern=true
spring:
mvc:
contentnegotiation:
favor-path-extension: true
pathmatch:
use-suffix-pattern: true
Bundan tashqari, barcha suffiks naqshlarini ochish o'rniga faqat ro'yxatga olingan suffiks naqshlarini qo'llab-quvvatlash ancha ishonchli usul bo'ladi:
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-registered-suffix-pattern=true
spring:
mvc:
contentnegotiation:
favor-path-extension: true
pathmatch:
use-registered-suffix-pattern: true
Spring Framework 5.3 versiyasidan boshlab, Spring MVC so'rov yo'llarini controller qayta ishlovchilariga moslashtirish uchun bir nechta strategiyalarni qo'llab-quvvatlaydi. Ilgari faqat AntPathMatcher strategiyasini qo'llab-quvvatlagan bo'lsa, endi PathPatternParserni ham taklif etadi. Spring Boot endi yangi strategiyani tanlash va ulash uchun konfiguratsiya mulkini taqdim etadi:
spring.mvc.pathmatch.matching-strategy=path-pattern-parser
spring:
mvc:
pathmatch:
matching-strategy: "path-pattern-parser"
Ushbu yangi amalga oshirishga e'tibor berish kerak bo'lgan sabablarga dalillarni maxsus blog postida ko'rib chiqing.
PathPatternParser optimallashtirilgan amalga oshirishdir, lekin yo'l naqshlari ba'zi variantlarini ishlatishni cheklaydi va suffiks naqshlarini moslashtirish (
spring.mvc.pathmatch.use-suffix-pattern,
spring.mvc.pathmatch.use-registered-suffix-pattern) yoki
DispatcherServletni servlet prefiksi bilan xaritalash (
spring.mvc.servlet.path) bilan mos kelmaydi.
ConfigurableWebBindingInitializer
Spring MVC WebBindingInitializerni har bir so'rov uchun WebDataBinderni ishga tushirish uchun ishlatadi. Agar siz o'zingizning ConfigurableWebBindingInitializerni yaratsangiz va @Bean annotatsiyasi bilan belgilasangiz, Spring Boot avtomatik ravishda Spring MVCni uni ishlatishga konfiguratsiya qiladi.
GO TO FULL VERSION