今天我們嘗試Kotlin整合Vertx,并決定建立一個(gè)非常簡(jiǎn)單的Web應(yīng)用程序,使用Kotlin和Vertx作為編程語言進(jìn)行編碼構(gòu)建。
創(chuàng)新互聯(lián)建站長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為靈武企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,靈武網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
生成項(xiàng)目
打開控制臺(tái)窗口執(zhí)行以下代碼進(jìn)行生成一個(gè)maven項(xiàng)目
修改pom.xml增加java和kotlin的支持
4.0.0 com.edurt.kvi kotlin-vertx-integration jar 1.0.0 kotlin-vertx-integration Kotlin Vertx Integration is a open source kotlin vertx integration example. 1.2.71 3.4.1 3.3 2.10.4 1.2.71 1.8 UTF-8 UTF-8 1.8 1.8 org.jetbrains.kotlin kotlin-stdlib-jdk8 ${dependency.kotlin.version} org.jetbrains.kotlin kotlin-reflect ${dependency.kotlin.version} io.vertx vertx-core ${dependency.vertx.ersion} io.vertx vertx-web ${dependency.vertx.ersion} 3.5.0 ${project.basedir}/src/main/kotlin ${project.basedir}/src/test/kotlin kotlin-maven-plugin org.jetbrains.kotlin -Xjsr305=strict spring jpa all-open org.jetbrains.kotlin kotlin-maven-allopen ${plugin.maven.kotlin.version} org.jetbrains.kotlin kotlin-maven-noarg ${plugin.maven.kotlin.version} kapt kapt src/main/kotlin org.springframework.boot spring-boot-configuration-processor ${project.parent.version} org.apache.maven.plugins maven-compiler-plugin ${plugin.maven.compiler.version} ${environment.compile.java.version} org.apache.maven.plugins maven-javadoc-plugin ${plugin.maven.javadoc.version} true Description test description-Xdoclint:none
添加Vertx實(shí)例
創(chuàng)建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?) { 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 { req -> req.response().end("Hello Kotlin Vertx Integration!") } }
設(shè)置啟動(dòng)類
package com.edurt.kvi import com.edurt.kvi.core.CoreVerticle import io.vertx.core.Vertx class KotlinVertxIntegration fun main(args: Array) { val vertx = Vertx.vertx() vertx.deployVerticle(CoreVerticle::class.java.name) }
以上操作在vertx.deployVerticle
階段執(zhí)行了部署Verticle的操作,即部署CoreVerticle。
啟動(dòng)應(yīng)用后瀏覽器訪問http://localhost:8080出現(xiàn)以下頁面
增加頁面渲染功能
修改pom.xml文件增加頁面依賴
1.7.25 io.vertx vertx-web-templ-thymeleaf ${dependency.vertx.ersion} org.slf4j slf4j-log4j12 ${dependency.slf4j.version}
增加頁面渲染文件
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("/index.html").handler { c -> render(c, engine, "templates/index.html") } } 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/index.html目錄下創(chuàng)建頁面文件
Kotlin Vertx Integration Welcome To Kotlin Vertx Integration!
修改CoreVerticle增加頁面跳轉(zhuǎn)
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{ 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") } }
啟動(dòng)應(yīng)用后瀏覽器訪問http://localhost:8080/index.html出現(xiàn)以下頁面
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。