亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Kotlin整合Vertx開發Web應用

2024-07-21 23:03:52
字體:
來源:轉載
供稿:網友

今天我們嘗試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.coreimport io.vertx.core.AbstractVerticleimport io.vertx.core.Futureimport io.vertx.core.Handlerimport io.vertx.ext.web.Routerimport io.vertx.ext.web.RoutingContextclass 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.kviimport com.edurt.kvi.core.CoreVerticleimport io.vertx.core.Vertxclass KotlinVertxIntegrationfun main(args: Array<String>) { val vertx = Vertx.vertx() vertx.deployVerticle(CoreVerticle::class.java.name)}

以上操作在vertx.deployVerticle階段執行了部署Verticle的操作,即部署CoreVerticle。

啟動應用后瀏覽器訪問http://localhost:8080出現以下頁面

Kotlin,Vertx,Web應用

增加頁面渲染功能

修改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.routerimport io.vertx.ext.web.Routerimport io.vertx.ext.web.RoutingContextimport io.vertx.ext.web.templ.ThymeleafTemplateEngineimport org.thymeleaf.templatemode.TemplateModeclass HomeViewRouterfun 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目錄下創建頁面文件

<!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.coreimport com.edurt.kvi.router.indeximport io.vertx.core.AbstractVerticleimport io.vertx.core.Futureimport io.vertx.core.Handlerimport io.vertx.core.Vertximport io.vertx.core.http.HttpServerResponseimport io.vertx.ext.web.Routerimport io.vertx.ext.web.RoutingContextclass 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/index.html出現以下頁面

Kotlin,Vertx,Web應用

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91精品视频在线观看| 国产精品久久久久福利| 136fldh精品导航福利| 国产suv精品一区二区三区88区| 一区二区在线视频播放| 精品久久久久久中文字幕| 最近2019年好看中文字幕视频| 久久男人av资源网站| 2018国产精品视频| 欧美大片va欧美在线播放| 亚洲自拍偷拍一区| 国产成人自拍视频在线观看| 欧美第一黄色网| 亚洲最大成人在线| 久久久久久久久久久久久久久久久久av| 国产日本欧美一区二区三区在线| 久久精品国产亚洲一区二区| 精品国产一区二区三区久久久| 国产日韩在线观看av| 欧美精品电影免费在线观看| 久久香蕉国产线看观看av| 精品电影在线观看| 精品久久久久久久久久久久久久| 成人a在线观看| 亚洲成人中文字幕| 精品无码久久久久久国产| 欧美日韩xxx| 青草青草久热精品视频在线观看| xxxx欧美18另类的高清| 亚洲欧洲免费视频| 91成品人片a无限观看| 亚洲的天堂在线中文字幕| 亚洲成年人在线播放| 美女少妇精品视频| 久久综合伊人77777| 国产va免费精品高清在线| 久久的精品视频| 欧美黑人狂野猛交老妇| 中文字幕日韩电影| 成人免费视频网址| 伊人久久久久久久久久| 奇米影视亚洲狠狠色| 亚洲老头老太hd| 亚洲第五色综合网| 国产视频精品在线| 91精品国产高清久久久久久| 热久久美女精品天天吊色| 91精品国产91久久久久久吃药| 最新的欧美黄色| 亚洲天堂av高清| 一二美女精品欧洲| 欧美丰满少妇xxxx| 国产精品www色诱视频| 亚洲欧美精品在线| 亚洲国产日韩欧美在线动漫| 亚洲精品日韩欧美| 九色精品美女在线| 久久精品视频亚洲| 欧美国产视频日韩| 久久国产精品久久国产精品| xxx欧美精品| 欧美性生交xxxxxdddd| 国产欧美精品日韩| 久久国产精品久久久| 国产男女猛烈无遮挡91| 欧美视频精品一区| 亚洲精品成人久久电影| 国产精品免费福利| 蜜臀久久99精品久久久久久宅男| 欧美激情按摩在线| 国产精品一区二区三区毛片淫片| 精品视频—区二区三区免费| 亚洲国产福利在线| 国产成人aa精品一区在线播放| 国产美女直播视频一区| 精品久久久久人成| 不卡av电影在线观看| 大荫蒂欧美视频另类xxxx| 久久99久久久久久久噜噜| 日韩成人黄色av| 精品视频久久久| 国产精品久久精品| 久久久精品免费| 91精品视频播放| 亚洲国产精品热久久| 欧美野外猛男的大粗鳮| 亚洲xxx大片| 久久久久久久久网站| 日韩av中文字幕在线播放| 午夜精品久久久久久久99黑人| 成人高清视频观看www| 欧美性猛交xxxx免费看| 日韩高清人体午夜| 国产精品美女www爽爽爽视频| 久久色在线播放| 91精品在线国产| 91人成网站www| 欧美丰满片xxx777| 精品视频在线观看日韩| 精品国产31久久久久久| 91精品在线影院| 亚洲第一av网| 亚洲自拍小视频免费观看| 亚洲一级一级97网| 国产精品专区一| 亚洲国产精品免费| 久久久在线视频| 久久伊人91精品综合网站| 97在线视频免费播放| 精品久久久久久亚洲精品| 日韩成人在线视频网站| 热re91久久精品国99热蜜臀| 欧美日本精品在线| 国产精品久久久| 国产精品久久久久久一区二区| 国产在线98福利播放视频| 国产精品九九九| 久久中文字幕视频| 国产一区二区三区在线观看网站| 成人性生交xxxxx网站| 欧美日本精品在线| 国产精品美女www爽爽爽视频| 亚洲mm色国产网站| 国产91精品高潮白浆喷水| 日韩av在线导航| 亚洲第一二三四五区| 国产一区二区三区在线视频| 狠狠做深爱婷婷久久综合一区| 青草成人免费视频| 69国产精品成人在线播放| 狠狠色香婷婷久久亚洲精品| 最近2019年手机中文字幕| 国产欧美一区二区三区久久| 亚洲欧美第一页| 精品久久久久久中文字幕一区奶水| 一本色道久久综合亚洲精品小说| 欧美xxxx做受欧美| 国产精品爱久久久久久久| 26uuu日韩精品一区二区| 欧美激情一二三| 国产日韩av在线| 成人美女av在线直播| 久久琪琪电影院| 久久偷看各类女兵18女厕嘘嘘| 91精品中国老女人| 亚洲欧美一区二区精品久久久| 亚洲天堂第二页| 亚洲国产精品va在线看黑人动漫| 午夜精品久久久久久久久久久久| 亚洲影院色在线观看免费| xvideos亚洲| 久久亚洲精品视频| 曰本色欧美视频在线| 欧美肥婆姓交大片| 日韩成人在线电影网| 欧美专区在线视频| 久久久精品999| 亚洲一区国产精品| 国产国语刺激对白av不卡| 日韩精品免费在线播放| 韩国19禁主播vip福利视频| 亚洲精品国产品国语在线| 日韩av一区在线观看| 久久久亚洲精品视频|