前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ktor: Kotlin Web后端框架 快速开始入门Ktor: Kotlin Web后端框架 Web backend framework for Kotlin 快速开始入门《Kotlin极简教

Ktor: Kotlin Web后端框架 快速开始入门Ktor: Kotlin Web后端框架 Web backend framework for Kotlin 快速开始入门《Kotlin极简教

作者头像
一个会写诗的程序员
发布2018-08-17 14:53:07
1.7K0
发布2018-08-17 14:53:07
举报

Ktor: Kotlin Web后端框架 Web backend framework for Kotlin 快速开始入门

非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~

Ktor 简介

Ktor 是一个用于在 Kotlin 中快速创建 web 应用程序的框架。

代码语言:javascript
复制
import org.jetbrains.ktor.netty.*
import org.jetbrains.ktor.routing.*
import org.jetbrains.ktor.application.*
import org.jetbrains.ktor.host.*
import org.jetbrains.ktor.http.*
import org.jetbrains.ktor.response.*

fun main(args: Array<String>) {
    embeddedServer(Netty, 8080) {
        routing {
            get("/") {
                call.respondText("Hello, world!", ContentType.Text.Html)
            }
        }
    }.start(wait = true)
}

创建工程

首先使用 IDEA 创建标准 Gradle+Kotlin 工程。

然后分别添加:

BlogApp.kt logback.xml

目录结构如下:

代码语言:javascript
复制
$ tree
.
├── build.gradle
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   ├── kotlin
    │   │   └── com
    │   │       └── easy
    │   │           └── kotlin
    │   │               └── BlogApp.kt
    │   └── resources
    │       └── logback.xml
    └── test
        ├── java
        ├── kotlin
        └── resources

12 directories, 4 files

在build.gradle中配置 Ktor 依赖

代码语言:javascript
复制
group 'com.easy.kotlin'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.1.3-2'
    ext.ktor_version = '0.4.0' // ktor 版本

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'application' // application plugin

mainClassName = 'com.easy.kotlin.BlogAppKt'  // main class

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    maven { url "http://dl.bintray.com/kotlin/ktor" }
    maven { url "https://dl.bintray.com/kotlin/kotlinx" }
}

dependencies {
    ...
    compile "org.jetbrains.ktor:ktor-core:$ktor_version"
    compile "org.jetbrains.ktor:ktor-netty:$ktor_version"

    compile "ch.qos.logback:logback-classic:1.2.1"
}


kotlin {
    experimental {
        coroutines "enable"
    }
}

其中,

代码语言:javascript
复制
compile "org.jetbrains.ktor:ktor-core:$ktor_version"
compile "org.jetbrains.ktor:ktor-netty:$ktor_version"

是 ktor 核心依赖。

BlogApp.kt

代码语言:javascript
复制
package com.easy.kotlin


import org.jetbrains.ktor.application.Application
import org.jetbrains.ktor.application.install
import org.jetbrains.ktor.features.CallLogging
import org.jetbrains.ktor.features.DefaultHeaders
import org.jetbrains.ktor.host.embeddedServer
import org.jetbrains.ktor.http.ContentType
import org.jetbrains.ktor.netty.Netty
import org.jetbrains.ktor.response.respondText
import org.jetbrains.ktor.routing.Routing
import org.jetbrains.ktor.routing.get
import java.util.*

fun Application.module() {
    install(DefaultHeaders)
    install(CallLogging)
    install(Routing) {
        get("/") {
            var html = "<li><a href = 'hello'>hello</a></li>"
            html += "<li><a href = 'now'>now</a></li>"
            call.respondText(html, ContentType.Text.Html)
        }

        get("/hello") {
            call.respondText("Hello, Ktor !", ContentType.Text.Html)
        }

        get("/now") {
            call.respondText("Now time is : ${Date()}", ContentType.Text.Html)
        }
    }
}

fun main(args: Array<String>) {
    embeddedServer(Netty, 8080, watchPaths = listOf("BlogAppKt"), module = Application::module).start()
}

logback.xml

代码语言:javascript
复制
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="trace">
        <appender-ref ref="STDOUT"/>
    </root>

    <logger name="org.eclipse.jetty" level="INFO"/>
    <logger name="io.netty" level="INFO"/>

</configuration>

运行结果

启动应用:

螢幕快照 2017-09-05 22.42.29.png

输出日志:

代码语言:javascript
复制
22:40:44: Executing external task 'run'...
:compileKotlin
Using kotlin incremental compilation
:compileJava NO-SOURCE
:copyMainKotlinClasses
:processResources
:classes
:run
2017-09-05 22:40:53.701 [main] DEBUG ktor.application - Java Home: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
2017-09-05 22:40:53.712 [main] DEBUG ktor.application - Class Loader: sun.misc.Launcher$AppClassLoader@73d16e93: [/Users/jack/easykotlin/ktor_demo/build/classes/java/main/, /Users/jack/easykotlin/ktor_demo/build/resources/main/, /Users/jack/.gradle/caches/modules-2/files-2.1/org.jetbrains.ktor/ktor-netty/0.4.0/f8809d15d9b447b669e8514f14addcb3586dcd26/ktor-netty-0.4.0.jar, /Users/jack/.gradle/caches/modules-2/files-2.1/org.jetbrains.ktor/ktor-hosts-common/0.4.0/bec3be6cc48a989347a7d3048266aff412d16668/ktor-hosts-common-0.4.0.jar, /Users/jack/.gradle/caches/modules-2/files-2.1/org.jetbrains.ktor/ktor-core/0.4.0/be0937d74f19862e8087b08a3b2306de65aa6f12/ktor-core-0.4.0.jar, ...
2017-09-05 22:40:53.717 [main] INFO  ktor.application - No ktor.deployment.watch patterns match classpath entries, automatic reload is not active
2017-09-05 22:40:54.364 [main] TRACE ktor.application - Application started: org.jetbrains.ktor.application.Application@f78a47e

浏览器访问: http://127.0.0.1:8080/

螢幕快照 2017-09-05 22.43.19.png

螢幕快照 2017-09-05 22.43.26.png

螢幕快照 2017-09-05 22.43.34.png

完整工程示例代码

https://github.com/EasyKotlin/ktor_demo

参考资料:

http://ktor.io

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ktor: Kotlin Web后端框架 Web backend framework for Kotlin 快速开始入门
  • Ktor 简介
  • 创建工程
  • 在build.gradle中配置 Ktor 依赖
  • BlogApp.kt
  • logback.xml
  • 运行结果
  • 完整工程示例代码
  • 参考资料:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档