JavaRush /Kurslar /All lectures for UZ purposes /Spring Boot va Web MVC, qism 2

Spring Boot va Web MVC, qism 2

All lectures for UZ purposes
Daraja , Dars
Mavjud

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:

Properties
spring.mvc.static-path-pattern=/resources/**
Yaml
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.

Agar ilova jar-fayl sifatida paketlansa, 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.

Agar siz JBoss ishlatsangiz, 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:

Properties
spring.web.resources.chain.strategy.content.enabled=true
spring.web.resources.chain.strategy.content.paths=/**
Yaml
spring:
  web:
    resources:
      chain:
        strategy:
          content:
            enabled: true
            paths: "/**"
Resurslarga havolalar ish vaqtida shablonlarda 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:

Properties
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
Yaml
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:

Properties
spring.mvc.contentnegotiation.favor-parameter=true
Yaml
spring:
  mvc:
    contentnegotiation:
      favor-parameter: true

Yoki agar siz boshqa parametr nomidan foydalanishni afzal ko'rsangiz:

Properties
spring.mvc.contentnegotiation.favor-parameter=true
spring.mvc.contentnegotiation.parameter-name=myparam
Yaml
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:

Properties
spring.mvc.contentnegotiation.media-types.markdown=text/markdown
Yaml
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:

Properties
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-suffix-pattern=true
Yaml
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:

Properties
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-registered-suffix-pattern=true
Yaml
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:

Properties
spring.mvc.pathmatch.matching-strategy=path-pattern-parser
Yaml
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.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION