HaftungsausschlussDer Autor ist kein Programmierer, kann nicht codieren
Ich bin kein Guru oder cooler Spezialist, weder in Kotlin noch im Frühling noch in einer anderen Technologie, die in diesem Artikel verwendet wird. Ich bin ein normaler Java-Junior, der beschlossen hat, Kotlin zu probieren. Alles wird im Sapsan auf dem Knie auf der Straße mit Techtrain gemacht
Für wen
Für Java-Entwickler, die gerade von Kotlin gehört haben, es aber noch nicht mit den Händen berührt haben
Wofür
Um zu zeigen, dass Kotlin gut mit Spring Boot funktioniert und in Kombination mit DSL in Bezug auf die Arbeit mit HTML bequemer ist als der klassische Ansatz mit JSP.
Konfiguration für Spring Boot
Hier unterscheidet sich nicht viel von Java
- Projekt erstellen (kotlin)
- Fügen Sie das Repository jcenter, die Abhängigkeit von kotlin-stdlib und das Spring-Boot-Starter-Web, das Kotlin-Maven-Plugin, hinzu
- Stellen Sie sicher, dass Sie ein Paket erstellen, damit es funktioniert. Andernfalls fällt der Frühling
- Erstellen Sie eine offene Anwendungsklasse
- Fügen Sie in Application die Hauptmethode mit der Zeile runApplication <Application> (* args) hinzu.
- Fügen Sie einen HelloWorld-Controller hinzu, der der Welt eine Begrüßung zurückgibt
Codepom.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>
Klassen 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 " " } }
Fügen Sie kotlinx.html hinzu
Kotlin hat eine Erweiterung in Form von DSL für die bequeme Arbeit mit HTML. Sie können den deklarativen Ansatz von HTML mit dem imperativen Ansatz einer gemeinsamen Sprache mischen.
table {// thead{ tr { td { +"" //+ } td { +"" } } } for (person in PersonGenerator().generate()) { // for kotlin tr { td { +person.name } td { text(person.age) // "+" String } } } }
Dieser Code bildet eine HTML-Seite, auf der ein Schild mit den Namen der Personen und ihrem Alter angezeigt wird
Codepom.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>
Klassen 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 hinzufügen
Kotlinx.html weiß praktisch nicht, wie man mit CSS arbeitet. Mit ihm können Sie einen Link zu einem vorgefertigten Stil hinzufügen oder Ihren eigenen mit unsicherem Stil einfügen. Alles wird viel besser, wenn Sie Aza-Kotlin-CSS - DSL hinzufügen und Arbeit mit CSS hinzufügen
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" } }
Die Arbeit mit js ist ebenfalls unsicher
Zusammenfassung
Meiner Meinung nach ist das Schreiben einer Ansicht über DSL bequemer als über JSP. Ich muss nicht zuerst in die Datenbank gehen, sondern das Berechnungsergebnis in ein Zwischenobjekt einfügen, das ich dann in jsp herausziehe. Ich kann meine JSP sofort aus der Projektcodebasis füllen, indem ich die Abstraktionsschicht umgehe, die ich nicht benötige. Leider habe ich jsp nur in meinem Haustierprojekt verwendet und beschäftige mich überhaupt nicht mit der Front. Es würde mich interessieren, die Meinung von Fachleuten zu diesem Thema zu lesen.
Nützliche Links
Ein Beispiel für ein rosa Etikett, das in einem Artikel entwickelt wurde
Kotlin-Dokumentation
Dokumentation zum Verbinden des Federschuhs mit Kotlin
Kotlinx.html Dokumentation
Aza-Kotlin-CSS-Dokumentation