موقع من صفحة واحدة على Kotlin و SpringBoot بدون استخدام JSP

تنويه

المؤلف ليس مبرمجًا ، لا يمكنه الترميز
أنا لست خبيرًا أو متخصصًا رائعًا لا في Kotlin ، ولا في Spring ، ولا في أي تقنية أخرى مستخدمة في هذه المقالة. أنا شاب جافا عادي قرر تجربة kotlin. كل شيء يتم في Sapsan على الركبة على الطريق مع techtrain


لمن


لمطوري جافا الذين سمعوا للتو عن كوتلن ، لكنهم لم يلمسوها بعد بأيديهم


من اجل ماذا


لإظهار أن kotlin يعمل بشكل جيد مع التمهيد الربيعي ، وبالاقتران مع DSL من حيث العمل مع html ، سيكون أكثر ملاءمة من النهج الكلاسيكي مع jsp.


تكوين التمهيد الربيع


كل شيء مختلف قليلاً هنا عن جافا


  1. إنشاء مشروع (kotlin)
  2. أضف jcenter المستودع ، الاعتماد على kotlin-stdlib و spring-boot-starter-web ، kotlin-maven-plugin
  3. تأكد من إنشاء حزمة للعمل ، وإلا سوف يسقط الربيع
  4. قم بإنشاء فئة تطبيق مفتوحة
  5. في التطبيق ، قم بإضافة الطريقة الرئيسية مع تشغيل الخط Application <Application> (* args)
  6. أضف جهاز تحكم HelloWorld الذي سيعيد تحية إلى العالم

كود
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>habr-sample</artifactId> <version>1.0-SNAPSHOT</version> <repositories> <repository> <id>jcenter</id> <name>jcenter</name> <url>https://jcenter.bintray.com</url> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>RELEASE</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> <configuration> <jvmTarget>1.8</jvmTarget> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>RELEASE</version> </dependency> </dependencies> </project> 

فصول
 package example import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication open class Application fun main(args: Array<String>) { runApplication<Application>(*args) } 

 package example import org.springframework.stereotype.Controller import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.ResponseBody @Controller class HelloWorld{ @RequestMapping("/") @ResponseBody fun mainPage(): String { return " " } } 

أضف kotlinx.html


Kotlin لديه امتداد في شكل DSL للعمل المريح مع html. يسمح لك بخلط النهج التعريفي لـ html مع النهج الحتمي للغة مشتركة.


 table {//  thead{ tr { td { +"" //+     } td { +"" } } } for (person in PersonGenerator().generate()) { // for  kotlin tr { td { +person.name } td { text(person.age) // "+"     String } } } } 

سيشكل هذا الرمز صفحة html تحتوي على لوحة بها أسماء الأشخاص وأعمارهم


النتيجة


كود
pom.xml
 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>habr-sample</artifactId> <version>1.0-SNAPSHOT</version> <repositories> <repository> <id>jcenter</id> <name>jcenter</name> <url>https://jcenter.bintray.com</url> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>RELEASE</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> <configuration> <jvmTarget>1.8</jvmTarget> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kotlinx-html-jvm</artifactId> <version>RELEASE</version> </dependency> </dependencies> </project> 

فصول
 package example data class Person(val name: String,var age: Int) 

 package example import java.util.* import kotlin.collections.ArrayList class PersonGenerator{ private val nameList = arrayOf("", "", "", "", "", ""); fun generate(): List<Person> { val random = Random() val personList = ArrayList<Person>() for (i in 1..15) { personList.add(Person(nameList.get(random.nextInt(nameList.size)), random.nextInt(30) + 18)) } return personList; } } 

 package example import kotlinx.html.* import kotlinx.html.stream.createHTML import org.springframework.stereotype.Controller import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.ResponseBody @Controller class HelloWorld { @RequestMapping("/") @ResponseBody fun mainPage(): String { return createHTML() .html { body { table { thead() { tr { td { +"" } td { +"" } } } val personList= PersonGenerator().generate() for (person in personList ) { tr { td { +person.name } td { text(person.age) } } } } } } } } 

أضف Css


لا يعرف Kotlinx.html عمليًا كيفية العمل مع css ، حيث يمكنك إضافة رابط إلى نمط جاهز أو إدراج نمط خاص بك باستخدام غير آمن. يصبح كل شيء أفضل بكثير إذا قمت بإضافة Aza-Kotlin-CSS - DSL مضيفا العمل مع css


 head { //  bootstrap styleLink("https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css") styleLink("https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css") //   style("text/css") { unsafe {//   unsafe kotlinx.html raw( Stylesheet { //     Aza-Kotlin-CSS table and td and th { color = 0xFC0Fc0 } }.render() ) } } meta { charset = "utf-8" } } 

النتيجة


العمل مع شبيبة يمر أيضا غير آمنة


الملخص


في رأيي ، تعد طريقة عرض الكتابة على DSL أكثر ملاءمة من JSP. لست بحاجة إلى الدخول أولاً إلى قاعدة البيانات ، ووضع نتيجة الحساب في كائن وسيط ، والذي سأقوم بعد ذلك بسحبه في jsp. يمكنني على الفور ملء ملف jsp الخاص بي من قاعدة كود المشروع بتجاوز طبقة التجريد التي لا أحتاجها. لسوء الحظ ، استخدمت jsp فقط في مشروع الحيوانات الأليفة الخاص بي ولا أتعامل مع الجبهة على الإطلاق. سأكون مهتماً بقراءة رأي المهنيين حول هذه القضية.


روابط مفيدة


مثال على الملصق الوردي الذي تم تطويره في مقالة
وثائق Kotlin
الوثائق التي تربط التمهيد الربيعي مع kotlin
وثائق Kotlinx.html
توثيق Aza-Kotlin-CSS

Source: https://habr.com/ru/post/ar422083/


All Articles