Spring Framework Spring MVC'ni Java'da JSR-223 spesifikatsiyasi asosida skriptlarni ishlatish mexanizmi yordamida ishlata oladigan har qanday shablonlashtirish kutubxonasi bilan ishlatish uchun ichki qo'llab-quvvatlashga ega. Biz skriptlarni turli ishlatish mexanizmlarida quyidagi shablonlashtirish kutubxonalarini sinovdan o'tkazdik:
| Skript kutubxonasi | Skriptlarni ishlatish mexanizmi |
|---|---|
ScriptEngine va
Invocable interfeyslarini amalga oshirishi kerak.
Talablar
Skriptlarni ishlatish mexanizmini classpath'ga qo'shish kerak bo'ladi, uning tafsilotlari skriptlarni ishlatish mexanizmi turiga bog'liq:
-
Nashorn deb nomlanuvchi JavaScript ishlatish mexanizmi Java 8+ bilan birga keladi. Oxirgi mavjud yangilanish versiyasidan foydalanish tavsiya etiladi.
-
JRuby Ruby tilini qo'llab-quvvatlash uchun dependencies sifatida qo'shilishi kerak.
-
Jython Python tilini qo'llab-quvvatlash uchun dependencies sifatida qo'shilishi kerak.
-
Kotlin skriptlarini qo'llab-quvvatlash uchun
org.jetbrains.kotlin:kotlin-script-utildependencies vaMETA-INF/services/javax.script.ScriptEngineFactoryfaylini qo'shish kerak, bundaorg.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactorysatri mavjud bo'ladi. Qo'shimcha ma'lumot uchun bu namunaga qarang.
Skriptlarni shablonlashtirish kutubxonasiga ega bo'lishingiz kerak. JavaScript uchun buni amalga oshirish yo'llaridan biri - WebJars.
Skriptor shablonlari
Qanday skript ishlatish mexanizmini ishlatishni, qaysi skript fayllarini yuklashni, shablonlarni vizuallashtirish uchun qaysi funksiyani chaqirishni va hokazolarni belgilash uchun ScriptTemplateConfigurer bean e'lon qilishingiz mumkin. Quyidagi misolda Mustache shablonlari va Nashorn nomli JavaScript skriptlarni ishlatish mexanizmi ishlatiladi:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@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;
}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {
override fun configureViewResolvers(registry: ViewResolverRegistry) {
registry.scriptTemplate()
}
@Bean
fun configurer() = ScriptTemplateConfigurer().apply {
engineName = "nashorn"
setScripts("mustache.js")
renderObject = "Mustache"
renderFunction = "render"
}
}
Quyidagi misolda XML'da qanday tashkil etilishi ko'rsatilgan:
<mvc:annotation-driven/>
<mvc:view-resolvers>
<mvc:script-template/>
</mvc:view-resolvers>
<mvc:script-template-configurer engine-name="nashorn" render-object="Mustache" render-function="render">
<mvc:script location="mustache.js"/>
</mvc:script-template-configurer>
Java va XML konfiguratsiyalar uchun controller hech qanday farq qilmaydi, quyidagi misolda ko'rsatilgan:
@Controller
public class SampleController {
@GetMapping("/sample")
public String test(Model model) {
model.addAttribute("title", "Namuna sarlavhasi");
model.addAttribute("body", "Namuna tanasi");
return "template";
}
}
@Controller
class SampleController {
@GetMapping("/sample")
fun test(model: Model): String {
model["title"] = "Namuna sarlavhasi"
model["body"] = "Namuna tanasi"
return "template"
}
}
Quyidagi misolda Mustache shabloni ko'rsatilgan:
<html>
<head>
<title>{{title}}</title>
</head>
<body>
<p>{{body}}</p>
</body>
</html>
Vizuallashtirish funksiyasi quyidagi parametrlar bilan chaqiriladi:
-
String template: Shablon matni -
Map model: Ko'rinish modeli -
RenderingContext renderingContext:RenderingContext, bu dastur konteksti, mintaqa sozlamalari, shablon yuklagichlari va URL manzillariga kirishni taqdim etadi (5.0 versiyasidan boshlab).
Mustache.render() dastlab ushbu signatura bilan mos keladi, shuning uchun uni to'g'ridan-to'g'ri chaqirish mumkin.
Agar sizning shablonlashtirish texnologiyangizni sozlash talab qilinsa, siz maxsus vizuallashtirish funksiyasini amalga oshiruvchi skriptni qabul qilishingiz mumkin. Masalan, Handlebars shablonlarni ishlatishdan oldin kompilyatsiya qilishni talab qiladi va brauzerlar imkoniyatlarini, server tomonida skriptlarni ishlatish mexanizmlarida mavjud bo'lmagan, emulyatsiya qilish uchun polizapolnitel' talab etadi.
Quyidagi misolda qanday qilish kerakligi ko'rsatilgan:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@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;
}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {
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 deb o'rnatish, Nashorn ustida ishlaydigan Handlebars yoki React kabi ko'p parallel ishlashga mo'ljallanmagan kutubxonalar bilan iplarga xavfsiz bo'lmagan skriptlarni ishlatish mexanizmlarini ishlatishda zarur. Bu holatda,
ushbu xatolik tufayli Java SE 8 update 60 yangilanishi talab qilinadi, ammo odatda, qaysi holatda bo'lmasin, Java SE oxirgi patch chiqishini ishlatish tavsiya etiladi.
polyfill.js faqat Handlebars'ga to'g'ri ishlashi uchun kerak bo'lgan window obyektini quyidagicha belgilaydi:
var window = {};
Ushbu asosiy render.js implementatsiyasi shablonni ishlatishdan oldin kompilyatsiya qiladi. Ishlashga tayyor implementatsiya har qanday qayta ishlatiladigan keshi shablonlarni yoki oldindan kompilyatsiya qilingan shablonlarni saqlashi kerak. Buni skript tomoni amalga oshirish mumkin (va sizga kerakli har qanday sozlashni boshqarish – masalan, shablon sozlagichini boshqarish). Quyidagi misolda buni qanday amalga oshirish ko'rsatilgan:
function render(template, model) {
var compiledTemplate = Handlebars.compile(template);
return compiledTemplate(model);
}
Spring Framework'ning modulli testlari, Java va resurslar haqida ko'proq konfiguratsiya misollarini ko'rib chiqish uchun tanishing.
GO TO FULL VERSION