JavaRush /Kurslar /All lectures for UZ purposes /Namoyish texnologiyalari

Namoyish texnologiyalari

All lectures for UZ purposes
Daraja, Dars
Mavjud

Thymeleaf

Thymeleaf - bu zamonaviy server tomonidagi Java shablonlash vositasi bo'lib, tabiiy HTML-shablonlar ustida ishlashni osonlashtiradi. Bu, masalan, dizaynerning ishlayotgan serverga ega bo'lishiga hojat qoldirmaydi. Thymeleaf boy funktsiyalar to'plamini taklif qiladi va doimiy rivojlanmoqda. Thymeleaf loyihasi sahifasida ko'proq ma'lumot olishingiz mumkin.

Thymeleaf'ni Spring WebFlux bilan integratsiyalash Thymeleaf loyihasi tomonidan amalga oshiriladi. Konfiguratsiya ba'zi bean e'lonlarini, masalan, SpringResourceTemplateResolver, SpringWebFluxTemplateEngine va ThymeleafReactiveViewResolver ni o'z ichiga oladi. Qo'shimcha ma'lumotlar uchun "Thymeleaf+Spring" va WebFlux bilan integratsiya e'loniga qarang.

FreeMarker

Apache FreeMarker - bu HTML dan tortib elektron pochta va boshqa turdagi matnli chiqishlarni generatsiya qilish uchun shablonlash vositasi. Spring Framework FreeMarker shablonlari bilan Spring WebFlux'ni ishlatish uchun integratsiya yomonlashishini o'z ichiga oladi.

Namoyish konfiguratsiyasi

Quyida FreeMarker'ni namoyish texnologiyasi sifatida qanday konfiguratsiya qilishni ko'rsatadigan misol keltirilgan:

Java
@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.freeMarker();
}
// FreeMarker'ni konfiguratsiya qilamiz...
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates/freemarker");
return configurer;
}
}
Kotlin
@Configuration
@EnableWebFlux
class WebConfig : WebFluxConfigurer {
override fun configureViewResolvers(registry: ViewResolverRegistry) {
registry.freeMarker()
}
// FreeMarker'ni konfiguratsiya qilamiz...
@Bean
fun freeMarkerConfigurer() = FreeMarkerConfigurer().apply {
setTemplateLoaderPath("classpath:/templates/freemarker")
}
}

Sizning shablonlaringiz FreeMarkerConfigurer tomonidan ko'rsatilgan katalogda saqlanishi kerak, yuqoridagi misolda ko'rsatilganidek. Agar kontroller welcome namoyishini qaytarsa, o'zgartiruvchi classpath:/templates/freemarker/welcome.ftl shablonini qidiradi.

FreeMarker konfiguratsiyasi

"Settings" va "SharedVariable"larni FreeMarker renderlash uchun to'g'ridan-to'g'ri FreeMarker'ni Configuration obyektiga (u Spring tomonidan boshqariladi) uzatish mumkin. freemarkerSettings obyekti java.util.Properties ni talab qiladi, va freemarkerVariables obyekti java.util.Map ni. Quyidagi misol FreeMarkerConfigurer dan foydalanishni ko'rsatadi:

Java
@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
// ...
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
Map<String, Object> variables = new HashMap<>();
variables.put("xml_escape", new XmlEscape());
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates");
configurer.setFreemarkerVariables(variables);
return configurer;
}
}
Kotlin
@Configuration
@EnableWebFlux
class WebConfig : WebFluxConfigurer {
// ...
@Bean
fun freeMarkerConfigurer() = FreeMarkerConfigurer().apply {
setTemplateLoaderPath("classpath:/templates")
setFreemarkerVariables(mapOf("xml_escape" to XmlEscape()))
}
}

FreeMarker Configuration obyektiga qo'llaniladigan sozlamalar va oʻzgaruvchilar haqida batafsil ma'lumotni FreeMarker'ning hujjatlaridan olishingiz mumkin.

Formalarni ishlash

Spring JSP'da foydalanish uchun teglar kutubxonasini, shu jumladan <spring:bind/> elementini o'z ichiga olgan. Ushbu element ma'lumodlarning asosiy obyektlaridan qiymatlarni chiqarish va Validator tomonidan o'tkazilmagan tekshiruv natijalarini veb-darajada yoki biznes-darajada ko'rsatishga imkon beradi. Shu bilan birga, Spring FreeMarker uchun ham ushbu funksiyalarning qo'llab-quvvatlanishini, shu jumladan forma kirish elementlarini generatsiya qilish uchun qulay makrolarni taqdim etadi.

Makrolar bog'lanishi

FreeMarker uchun standart makroslar to'plamini qo'llab-quvvatlanishi spring-webflux.jar faylida joylashgan, shuning uchun ular mos ravishda sozlangan ilovalar uchun har doim mavjud.

Ba'zi makrolar Spring'dagi shablonlash kutubxonalarida xususiy (privat) hisoblanadi, lekin makrolarning ta'riflarida bunday cheklovlar yo'q, bu esa barcha makrolarni chaqiruv kodlari va foydalanuvchi shablonlari uchun ko'rinadigan qiladi. Keyingi bo'limlar faqat shablonlardan to'g'ridan-to'g'ri chaqirilishi kerak bo'lgan makrolarga bag'ishlangan. Agar sizga makroslar kodini to'g'ridan-to'g'ri ko'rib chiqish kerak bo'lsa, fayl spring.ftl deb nomlanadi va org.springframework.web.reactive.result.view.freemarker paketida joylashgan.

Forma makrolari

Spring'da FreeMarker shablonlari uchun forma makrolarining qo'llab-quvvatlash vositalari haqida batafsil ma'lumot olish uchun, iltimos, Spring MVC hujjatlarining keyingi bo'limlariga murojaat qiling.

  • Kirish makroslari

  • Kirish maydonchalari

  • Tanlash maydonchalari

  • HTML ekranlash

Skriptli namoyishlar

Spring Framework JSR-223 spetsifikatsiyasiga asoslangan skriptni ishlatish mexanizmi ustida ishlaydigan har qanday shablonlash kutubxonasini Spring WebFlux bilan ishlatish uchun integratsiyaga ega. Keyingi jadvalda biz turli skriptni ishlatish mexanizmlarida sinovdan o'tgan shablon kutubxonalari keltirilgan:

Skriptni ishlatish uchun boshqa biror mexanizmni integratsiyalashning asosiy qoidasi shundaki, u ScriptEngine va Invocable interfeyslarini amalga oshirishi kerak.

Talablar

Skriptni ishlatish mexanizmi classpathda mavjudligini ta'minlash kerak, bu mexanizmning tafsilotlariga bog'liq:

  • JavaScriptni ishlatish mexanizmi bo'lgan Nashorn Java 8+ bilan birga keladi. Oxirgi mavjud yangilanishni ishlatish tavsiya etiladi.

  • JRuby ni Ruby tilini qo'llab-quvvatlash uchun bog'liqlik sifatida qo'shish kerak.

  • Jython ni Python tilini qo'llab-quvvatlash uchun bog'liqlik sifatida qo'shish kerak.

  • Kotlin skriptlarini qo'llab-quvvatlash uchun org.jetbrains.kotlin:kotlin-script-util bog'liqligini va META-INF/services/javax.script.ScriptEngineFactory faylini qo'shish kerak, unda org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory yozuv mavjud bo'lishi kerak. Batafsil ma'lumot uchun bu misolga qarang.

Skriptli shablonlash kutubxonasini qo'shishingiz kerak. JavaScript uchun buni amalga oshirish usullaridan biri WebJars dir.

Skriptli shablonlar

Qaysi skriptni ishlatish mexanizmidan foydalanish, qaysi skript fayllarini yuklash, qaysi funksiyani shablonlarni ko'rish uchun chaqirish kerakligini belgilash uchun ScriptTemplateConfigurer bean e'lon qilishingiz mumkin. Quyidagi misol Mustache shablonlari va Nashorn JavaScript'ni ishlatish mexanizmidan foydalanadi:

Java
@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.scriptTemplate();
}
@Bean
public ScriptTemplateConfigurer configurer() {
ScriptTemplateConfigurer configurer = new ScriptTemplateConfigurer();
configurer.setEngineName("nashorn");
configurer.setScripts("mustache.js");
configurer.setRenderObject("Mustache");
configurer.setRenderFunction("render");
return configurer;
}
}
Kotlin
@Configuration
@EnableWebFlux
class WebConfig : WebFluxConfigurer {
override fun configureViewResolvers(registry: ViewResolverRegistry) {
registry.scriptTemplate()
}
@Bean
fun configurer() = ScriptTemplateConfigurer().apply {
engineName = "nashorn"
setScripts("mustache.js")
renderObject = "Mustache"
renderFunction = "render"
}
}

render funksiyasi quyidagi parametrlari bilan chaqiriladi:

  • String template: Shablon mazmuni

  • Map model: Namoyish modeli

  • RenderingContext renderingContext: RenderingContext, kontekstga, lokallarga, shablon yuklovchiga va URL'ga kirishni ta'minlaydigan obyekt (5.0 versiyasidan boshlab).

Mustache.render() bu imzo bilan mos keladi, shuning uchun uni bevosita chaqirish mumkin.

Agar shablonlash texnologiyangiz ma'lum bir sozlashni talab qilsa, siz maxsus renderlash funksiyasini amalga oshiradigan skriptni uzatishingiz mumkin. Masalan, Handlerbars shablonlarni ishlatish uchun oldindan kompilyatsiyalashni talab qiladi va ba'zi brauzer funksiyalarini emulyatsiya qilish uchun polizapolnenie'ni talab qiladi. Quyidagi misolda maxsus renderlash funksiyasini sozlash ko'rsatilgan:

Java
@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.scriptTemplate();
}
@Bean
public ScriptTemplateConfigurer configurer() {
ScriptTemplateConfigurer configurer = new ScriptTemplateConfigurer();
configurer.setEngineName("nashorn");
configurer.setScripts("polyfill.js", "handlebars.js", "render.js");
configurer.setRenderFunction("render");
configurer.setSharedEngine(false);
return configurer;
}
}
Kotlin
@Configuration
@EnableWebFlux
class WebConfig : WebFluxConfigurer {
override fun configureViewResolvers(registry: ViewResolverRegistry) {
registry.scriptTemplate()
}
@Bean
fun configurer() = ScriptTemplateConfigurer().apply {
engineName = "nashorn"
setScripts("polyfill.js", "handlebars.js", "render.js")
renderFunction = "render"
isSharedEngine = false
}
}
sharedEngine xususiyatini false ga o'rnatish Nashorn ustida ishlaydigan Handlebars yoki React kabi ko'p tishlashga mo'ljallanmagan shablon kutubxonalar bilan ko'p tishlash uchun xavfsiz bo'lmagan skriptni ishlatish mexanizmi bilan foydalanilganda zarur. Bunda ushbu kamchilik tufayli Java SE 8 update 60 yangilanishi kerak bo'ladi, lekin har qanday holatda ham Java SE oxirgi yamasi ko'pincha tavsiya etiladi.

polyfill.js faqatgina Handlebarlar uchun to'g'ri ishlashi uchun kerak bo'lgan window obyektini aniqlaydi, quyidagi fragmentda ko'rsatilgani kabi:

var window = {};

Ushbu asosiy render.js implementatsiyasi shablonni ishlatishdan oldin kompilyatsiya qiladi. Ishlab chiqarish uchun mos implementatsiyaga har qanday qayta foydalaniladigan keshlangan shablonlarni yoki oldindan kompilyatsiya qilingan shablonlarni saqlash kiradi. Buni skript tomonida, shuningdek sizga kerak bo'lgan har qanday sozlashlar bilan (masalan, shablonni konfiguratsiyasini boshqarish orqali) amalga oshirish mumkin. Quyidagi misolda shablonni qanday kompilyatsiya qilish ko'rsatilgan:

function render(template, model) {
var compiledTemplate = Handlebars.compile(template);
return compiledTemplate(model);
}

Spring Framework sinovli testlarini, Java va resurslarini, ko'proq konfiguratsiya misollarini ko'rish uchun ko'rib chiqing.

JSON va XML

Tarkib muvofiqligini ta'minlash uchun foydali bo'lgan modelni HTML formatida yoki boshqa formatlarda (masalan, JSON yoki XML) ko'rsatishni navbatma navbatlovchi imkoniyatga ega bo'lish foydali. Bunday qo'llab-quvvatlash Spring WebFlux'ta HttpMessageWriterView orqali ta'minlanishi mumkin, spring-web dan foydalanish uchun mavjud bo'lgan har qanday kodeklarni, Jackson2JsonEncoder, Jackson2SmileEncoder yoki Jaxb2XmlEncoder kabi biriktirish uchun foydalanilishi mumkin.

Boshqa namoyish texnologiyalaridan farqli o'laroq, HttpMessageWriterView ViewResolverni talab qilmaydi va sukut bo'yicha ko'rish sifatida konfiguratsiya qilinadi. Har xil HttpMessageWriter yoki Encoder nusxalarini o'rab, sukut bo'yicha bir yoki bir nechta shunday ko'rishlarni sozlashingiz mumkin. Ko'rsatma vaqtida, ular so'ralgan tarkib turiga mos keladigan biri ishlatiladi.

Aksariyat holatlarda model bir nechta atributlarni o'z ichiga oladi. Qaysi birini serializatsiya qilishni aniqlash uchun, HttpMessageWriterViewni natijani ko'rsatishga foydalaniladigan model atributi nomi bilan konfiguratsiya qilishingiz mumkin. Agar model faqat bitta atributni o'z ichiga olsa, unda aynan o'sha atribut ishlatiladi.

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