Situs satu halaman di Kotlin dan SpringBoot tanpa menggunakan JSP

Penafian

Penulis bukan seorang programmer, tidak bisa kode
Saya bukan seorang guru atau spesialis keren baik di Kotlin, atau di Spring, atau dalam teknologi lain yang digunakan dalam artikel ini. Saya seorang junior java reguler yang memutuskan untuk mencoba kotlin. Semuanya dilakukan di Sapsan dengan lutut di jalan dengan techtrain


Untuk siapa


Untuk pengembang java yang baru saja mendengar tentang kotlin, tetapi belum menyentuhnya dengan tangan mereka


Untuk apa


Untuk menunjukkan bahwa kotlin berfungsi baik dengan spring boot, dan dalam kombinasi dengan DSL dalam hal bekerja dengan html akan lebih mudah daripada pendekatan klasik dengan jsp.


Konfigurasi untuk booting musim semi


Di sini, semuanya tidak jauh berbeda dengan java


  1. Buat proyek (kotlin)
  2. Tambahkan repositori jcenter, ketergantungan pada kotlin-stdlib dan spring-boot-starter-web, kotlin-maven-plugin
  3. Pastikan untuk membuat paket agar berfungsi, jika tidak maka Spring akan jatuh
  4. Buat kelas Aplikasi terbuka
  5. Dalam Aplikasi, tambahkan metode utama dengan baris runApplication <Application> (* args)
  6. Tambahkan pengontrol HelloWorld yang akan mengembalikan salam ke dunia

Kode
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> 

Kelas
 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 " " } } 

Tambahkan kotlinx.html


Kotlin memiliki ekstensi dalam bentuk DSL untuk kenyamanan kerja dengan html. Ini memungkinkan Anda untuk mencampur pendekatan deklaratif html dengan pendekatan imperatif bahasa umum.


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

Kode ini akan membentuk halaman html di mana akan ada piring dengan nama-nama orang dan umur mereka


Hasil


Kode
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> 

Kelas
 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) } } } } } } } } 

Tambahkan css


Kotlinx.html praktis tidak tahu cara bekerja dengan css, dengan itu Anda dapat menambahkan tautan ke gaya yang sudah jadi atau menyisipkan sendiri menggunakan yang tidak aman. Semuanya menjadi jauh lebih baik jika Anda menambahkan Aza-Kotlin-CSS - DSL menambahkan kerja dengan 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" } } 

Hasil


Bekerja dengan js juga melewati tidak aman


Ringkasan


Menurut pendapat saya, tampilan penulisan pada DSL lebih nyaman daripada pada JSP. Saya tidak perlu terlebih dahulu masuk ke dalam basis data, memasukkan hasil perhitungan dalam objek perantara, yang kemudian akan saya tarik dalam jsp. Saya dapat segera mengisi jsp saya dari basis kode proyek dengan melewati lapisan abstraksi yang tidak saya butuhkan. Sayangnya, saya menggunakan jsp hanya di proyek peliharaan saya dan tidak berurusan dengan front sama sekali. Saya akan tertarik untuk membaca pendapat para profesional tentang masalah ini.


Tautan yang bermanfaat


Contoh label merah muda yang dikembangkan dalam sebuah artikel
Dokumentasi Kotlin
Dokumentasi menghubungkan pegas boot ke kotlin
Dokumentasi Kotlinx.html
Dokumentasi Aza-Kotlin-CSS

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


All Articles