Descargo de responsabilidadEl autor no es programador, no puede codificar
No soy un gurú ni un especialista genial ni en Kotlin, ni en Spring, ni en ninguna otra tecnología utilizada en este artículo. Soy un joven Java normal que decidió probar Kotlin. Todo se hace en el Sapsan en la rodilla en la carretera con techtrain
Para quien
Para los desarrolladores de Java que acaban de enterarse de Kotlin, pero que aún no lo han tocado con sus manos
Para que
Para demostrar que kotlin funciona bien con el arranque de primavera, y en combinación con DSL en términos de trabajo con html, será más conveniente que el enfoque clásico con jsp.
Configuración para arranque de primavera
Aquí, todo no es muy diferente de Java
- Crear proyecto (kotlin)
- Agregue el repositorio jcenter, dependencia de kotlin-stdlib y spring-boot-starter-web, kotlin-maven-plugin
- Asegúrese de crear un paquete para trabajar, de lo contrario la primavera caerá
- Crear una clase de aplicación abierta
- En la aplicación, agregue el método principal con la línea runApplication <Application> (* args)
- Agregue un controlador HelloWorld que devolverá un saludo al mundo
Códigopom.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>
Clases 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 " " } }
Añadir kotlinx.html
Kotlin tiene una extensión en forma de DSL para un trabajo conveniente con html. Le permite mezclar el enfoque declarativo de html con el enfoque imperativo de un lenguaje común.
table {// thead{ tr { td { +"" //+ } td { +"" } } } for (person in PersonGenerator().generate()) { // for kotlin tr { td { +person.name } td { text(person.age) // "+" String } } } }
Este código formará una página html en la que habrá una placa con los nombres de las personas y su edad.
Códigopom.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>
Clases 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) } } } } } } } }
Añadir CSS
Kotlinx.html prácticamente no sabe cómo trabajar con CSS, con él puede agregar un enlace a un estilo ya terminado o insertar el suyo usando inseguro. Todo se vuelve mucho mejor si agrega Aza-Kotlin-CSS - DSL agregando trabajo con 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" } }
Trabajar con js también pasa por inseguro
Resumen
En mi opinión, escribir vista en DSL es más conveniente que en JSP. No es necesario que primero vaya a la base de datos, coloque el resultado del cálculo en un objeto intermedio, que luego extraeré en jsp. Puedo llenar mi jsp inmediatamente desde la base del código del proyecto sin pasar por la capa de abstracción que no necesito. Desafortunadamente, usé jsp solo en mi proyecto de mascota y no trato con el frente en absoluto. Me interesaría leer la opinión de profesionales sobre este tema.
Enlaces utiles
Un ejemplo de una etiqueta rosa desarrollada en un artículo.
Documentación de Kotlin
Documentación que conecta la bota de resorte a kotlin
Documentación de Kotlinx.html
Documentación Aza-Kotlin-CSS