Clause de non-responsabilitéL'auteur n'est pas un programmeur, ne peut pas coder
Je ne suis pas un gourou ou un spécialiste cool ni à Kotlin, ni au printemps, ni dans aucune autre technologie utilisée dans cet article. Je suis un java junior régulier qui a décidé d'essayer le kotlin. Tout se fait dans le Sapsan à genoux sur la route avec techtrain
Pour qui
Pour les développeurs java qui viennent d'entendre parler de kotlin, mais qui ne l'ont pas encore touché de leurs mains
Pour quoi
Pour montrer que kotlin fonctionne bien avec Spring Boot, et en combinaison avec DSL en termes de travail avec HTML, ce sera plus pratique que l'approche classique avec JSP.
Configuration pour Spring Boot
Tout est un peu différent ici de Java
- Créer un projet (kotlin)
- Ajouter un référentiel jcenter, dépendance à kotlin-stdlib et spring-boot-starter-web, kotlin-maven-plugin
- Assurez-vous de créer un package pour fonctionner, sinon le printemps tombera
- Créer une classe d'application ouverte
- Dans Application, ajoutez la méthode principale avec la ligne runApplication <Application> (* args)
- Ajoutez un contrôleur HelloWorld qui renverra un message d'accueil au monde
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>
Cours 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 " " } }
Ajouter kotlinx.html
Kotlin a une extension sous forme de DSL pour un travail pratique avec html. Il vous permet de mélanger l'approche déclarative du html avec l'approche impérative d'un langage commun.
table {// thead{ tr { td { +"" //+ } td { +"" } } } for (person in PersonGenerator().generate()) { // for kotlin tr { td { +person.name } td { text(person.age) // "+" String } } } }
Ce code formera une page html dans laquelle il y aura une plaque avec les noms des personnes et leur âge
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>
Cours 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) } } } } } } } }
Ajouter css
Kotlinx.html ne sait pratiquement pas comment travailler avec CSS, avec lui, vous pouvez ajouter un lien vers un style existant ou insérer le vôtre en utilisant dangereux. Tout devient beaucoup mieux si vous ajoutez Aza-Kotlin-CSS - DSL ajoutant du travail avec 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" } }
Le travail avec js passe également par dangereux
Résumé
À mon avis, l'écriture de vue sur DSL est plus pratique que sur JSP. Je n'ai pas besoin d'aller d'abord dans la base de données, de mettre le résultat du calcul dans un objet intermédiaire, que je retirerai ensuite en jsp. Je peux immédiatement remplir mon jsp à partir de la base de code du projet en contournant la couche d'abstraction dont je n'ai pas besoin. Malheureusement, j'ai utilisé jsp uniquement dans mon projet pour animaux de compagnie et je ne m'occupe pas du tout du devant. Je serais intéressé de lire l'avis des professionnels sur cette question.
Liens utiles
Un exemple d'étiquette rose développée dans un article
Documentation Kotlin
Documentation connectant Spring Boot à Kotlin
Documentation de Kotlinx.html
Documentation Aza-Kotlin-CSS