当前位置: 移动技术网 > IT编程>移动开发>Android > Kotlin整合Vertx开发Web应用

Kotlin整合Vertx开发Web应用

2019年07月29日  | 移动技术网IT编程  | 我要评论

降魔的21,五十岚隼士男扮女装,跨界歌王 综艺

今天我们尝试kotlin整合vertx,并决定建立一个非常简单的web应用程序,使用kotlin和vertx作为编程语言进行编码构建。

生成项目

打开控制台窗口执行以下代码进行生成一个maven项目

复制代码 代码如下:
mvn archetype:generate -dgroupid=com.edurt.kvi -dartifactid=kotlin-vertx-integration -darchetypeartifactid=maven-archetype-quickstart -dversion=1.0.0 -dinteractivemode=false

修改pom.xml增加java和kotlin的支持

<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/maven-v4_0_0.xsd">

 <modelversion>4.0.0</modelversion>
 <groupid>com.edurt.kvi</groupid>
 <artifactid>kotlin-vertx-integration</artifactid>
 <packaging>jar</packaging>
 <version>1.0.0</version>

 <name>kotlin-vertx-integration</name>
 <description>kotlin vertx integration is a open source kotlin vertx integration example.</description>

 <!-- properties -->
 <properties>
  <!-- dependency -->
  <dependency.kotlin.version>1.2.71</dependency.kotlin.version>
  <dependency.vertx.ersion>3.4.1</dependency.vertx.ersion>
  <!-- plugin -->
  <plugin.maven.compiler.version>3.3</plugin.maven.compiler.version>
  <plugin.maven.javadoc.version>2.10.4</plugin.maven.javadoc.version>
  <plugin.maven.kotlin.version>1.2.71</plugin.maven.kotlin.version>
  <!-- environment -->
  <environment.compile.java.version>1.8</environment.compile.java.version>
  <project.build.sourceencoding>utf-8</project.build.sourceencoding>
  <project.reporting.outputencoding>utf-8</project.reporting.outputencoding>
  <java.version>1.8</java.version>
  <jvmtarget>1.8</jvmtarget>
 </properties>

 <!-- dependencys -->
 <dependencies>
  <!-- kotlin -->
  <dependency>
   <groupid>org.jetbrains.kotlin</groupid>
   <artifactid>kotlin-stdlib-jdk8</artifactid>
   <version>${dependency.kotlin.version}</version>
  </dependency>
  <dependency>
   <groupid>org.jetbrains.kotlin</groupid>
   <artifactid>kotlin-reflect</artifactid>
   <version>${dependency.kotlin.version}</version>
  </dependency>
  <!-- vertx -->
  <dependency>
   <groupid>io.vertx</groupid>
   <artifactid>vertx-core</artifactid>
   <version>${dependency.vertx.ersion}</version>
  </dependency>
  <dependency>
   <groupid>io.vertx</groupid>
   <artifactid>vertx-web</artifactid>
   <version>${dependency.vertx.ersion}</version>
  </dependency>
 </dependencies>

 <!-- prerequisites -->
 <prerequisites>
  <maven>3.5.0</maven>
 </prerequisites>

 <!-- build -->
 <build>
  <sourcedirectory>${project.basedir}/src/main/kotlin</sourcedirectory>
  <testsourcedirectory>${project.basedir}/src/test/kotlin</testsourcedirectory>
  <plugins>
   <plugin>
    <artifactid>kotlin-maven-plugin</artifactid>
    <groupid>org.jetbrains.kotlin</groupid>
    <configuration>
     <args>
      <arg>-xjsr305=strict</arg>
     </args>
     <compilerplugins>
      <plugin>spring</plugin>
      <plugin>jpa</plugin>
      <plugin>all-open</plugin>
     </compilerplugins>
     <pluginoptions>
      <option>all-open:annotation=javax.persistence.entity</option>
     </pluginoptions>
    </configuration>
    <dependencies>
     <dependency>
      <groupid>org.jetbrains.kotlin</groupid>
      <artifactid>kotlin-maven-allopen</artifactid>
      <version>${plugin.maven.kotlin.version}</version>
     </dependency>
     <dependency>
      <groupid>org.jetbrains.kotlin</groupid>
      <artifactid>kotlin-maven-noarg</artifactid>
      <version>${plugin.maven.kotlin.version}</version>
     </dependency>
    </dependencies>
    <executions>
     <execution>
      <id>kapt</id>
      <goals>
       <goal>kapt</goal>
      </goals>
      <configuration>
       <sourcedirs>
        <sourcedir>src/main/kotlin</sourcedir>
       </sourcedirs>
       <annotationprocessorpaths>
        <annotationprocessorpath>
         <groupid>org.springframework.boot</groupid>
         <artifactid>spring-boot-configuration-processor</artifactid>
         <version>${project.parent.version}</version>
        </annotationprocessorpath>
       </annotationprocessorpaths>
      </configuration>
     </execution>
    </executions>
   </plugin>
   <plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-compiler-plugin</artifactid>
    <version>${plugin.maven.compiler.version}</version>
    <configuration>
     <source>${environment.compile.java.version}</source>
     <target>${environment.compile.java.version}</target>
    </configuration>
   </plugin>
   <plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-javadoc-plugin</artifactid>
    <version>${plugin.maven.javadoc.version}</version>
    <configuration>
     <aggregate>true</aggregate>
     <!-- custom tags -->
     <tags>
      <tag>
       <name>description</name>
       <placement>test</placement>
       <head>description</head>
      </tag>
     </tags>
     <!-- close jdoclint check document -->
     <additionalparam>-xdoclint:none</additionalparam>
    </configuration>
   </plugin>
  </plugins>
 </build>

</project>

添加vertx实例

创建coreverticle类文件

package com.edurt.kvi.core

import io.vertx.core.abstractverticle
import io.vertx.core.future
import io.vertx.core.handler
import io.vertx.ext.web.router
import io.vertx.ext.web.routingcontext

class coreverticle : abstractverticle() {

 override fun start(startfuture: future<void>?) {
  val router = createrouter()
  val port = config().getinteger("http.port", 8080)
  vertx.createhttpserver()
    .requesthandler { router.accept(it) }
    .listen(port) { result ->
     if (result.succeeded()) {
      startfuture?.complete()
     } else {
      startfuture?.fail(result.cause())
     }
    }
 }

 private fun createrouter() = router.router(vertx).apply {
  get("/").handler(handlerroot)
 }

 /**
  * create router instance
  */
 val handlerroot = handler<routingcontext> { req ->
  req.response().end("hello kotlin vertx integration!")
 }

}

设置启动类

package com.edurt.kvi

import com.edurt.kvi.core.coreverticle
import io.vertx.core.vertx

class kotlinvertxintegration

fun main(args: array<string>) {
 val vertx = vertx.vertx()
 vertx.deployverticle(coreverticle::class.java.name)
}

以上操作在vertx.deployverticle阶段执行了部署verticle的操作,即部署coreverticle。

启动应用后浏览器访问http://localhost:8080出现以下页面

增加页面渲染功能

修改pom.xml文件增加页面依赖

<dependency.slf4j.version>1.7.25</dependency.slf4j.version>

<dependency>
 <groupid>io.vertx</groupid>
 <artifactid>vertx-web-templ-thymeleaf</artifactid>
 <version>${dependency.vertx.ersion}</version>
</dependency>
<dependency>
 <groupid>org.slf4j</groupid>
 <artifactid>slf4j-log4j12</artifactid>
 <version>${dependency.slf4j.version}</version>
</dependency>

增加页面渲染文件

package com.edurt.kvi.router

import io.vertx.ext.web.router
import io.vertx.ext.web.routingcontext
import io.vertx.ext.web.templ.thymeleaftemplateengine
import org.thymeleaf.templatemode.templatemode

class homeviewrouter

fun index(r: router) {
 val engine = thymeleaftemplateengine.create().setmode(templatemode.html)
 r.get("/").handler { c ->
  render(c, engine, "templates/")
 }
}

fun render(c: routingcontext, engine: thymeleaftemplateengine, templ: string) {
 engine.render(c, templ) { res ->
  if (res.succeeded()) {
   c.response().end(res.result())
  } else {
   c.fail(res.cause())
  }
 }
}

在templates/目录下创建页面文件

<!doctype html system "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>kotlin vertx integration</title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
</head>

<body>
<p>welcome to kotlin vertx integration!</p>
</body>
</html>

修改coreverticle增加页面跳转

package com.edurt.kvi.core

import com.edurt.kvi.router.index
import io.vertx.core.abstractverticle
import io.vertx.core.future
import io.vertx.core.handler
import io.vertx.core.vertx
import io.vertx.core.http.httpserverresponse
import io.vertx.ext.web.router
import io.vertx.ext.web.routingcontext

class coreverticle : abstractverticle() {

 override fun start() {
  val router = createrouter(vertx)

  // go to index page
  index(router)

  vertx.createhttpserver().requesthandler { handler -> router.accept(handler) }.listen(8080)

//  val port = config().getinteger("http.port", 8080)
//  vertx.createhttpserver()
//    .requesthandler { router.accept(it) }
//    .listen(port) { result ->
//     if (result.succeeded()) {
//      startfuture?.complete()
//     } else {
//      startfuture?.fail(result.cause())
//     }
//    }
 }

 private fun createrouter() = router.router(vertx).apply {
  get("/").handler(handlerroot)
 }

 /**
  * create router instance
  */
 val handlerroot = handler<routingcontext> { req ->
  req.response().end("hello kotlin vertx integration!")
 }

 fun createrouter(v: vertx): router {
  var router = router.router(v)
  router.route("/").handler { c -> c.response().end("hello kotlin vertx integration!") }
  router.route("/index").handler { c -> c.response().html().end("hello kotlin vertx integration page!") }
  return router
 }

 fun httpserverresponse.html(): httpserverresponse {
  return this.putheader("content-type", "text/html")
 }

}

启动应用后浏览器访问http://localhost:8080/出现以下页面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网