Statik kontent
Standart bo'yicha Spring Boot statik kontentni /static
(yoki /public
yoki /resources
, yoki /META-INF/resources
) katalogidan yuklaydi, yoki ServletContext
ning 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 ServletContext
ning 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.Resources
da 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 PathPatternParser
ni 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
DispatcherServlet
ni servlet prefiksi bilan xaritalash (
spring.mvc.servlet.path
) bilan mos kelmaydi.
ConfigurableWebBindingInitializer
Spring MVC WebBindingInitializer
ni har bir so'rov uchun WebDataBinder
ni ishga tushirish uchun ishlatadi. Agar siz o'zingizning ConfigurableWebBindingInitializer
ni yaratsangiz va @Bean
annotatsiyasi bilan belgilasangiz, Spring Boot avtomatik ravishda Spring MVCni uni ishlatishga konfiguratsiya qiladi.
GO TO FULL VERSION