在VertX

时间:2016-08-31 16:05:43

标签: kotlin vert.x

我在Kotlin中使用Vert.X(通过org.jetbrains.kotlinx:vertx3-lang-kotlin库),我试图构建一个单页jar中自包含的应用程序。

在maven方面,这些是我的依赖:

<properties>        
    ...               
    <vertx.version>3.3.2</vertx.version>
    <kotlin.version>1.0.3</kotlin.version>
    <main.class>Bob</main.class>
</properties>

<!-- Vertx Dependencies -->
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-core</artifactId>
    <version>${vertx.version}</version>
</dependency>
<dependency>
    <groupId>io.vertx</groupId>
    <artifactId>vertx-web</artifactId>
    <version>${vertx.version}</version>
</dependency>

<!-- Kotlin Dependencies -->
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib</artifactId>
    <version>${kotlin.version}</version>
</dependency>
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-test</artifactId>
    <version>${kotlin.version}</version>
    <scope>test</scope>
</dependency>

<!-- Kotlin Vertx Binding Dependency -->
<dependency>
    <groupId>org.jetbrains.kotlinx</groupId>
    <artifactId>vertx3-lang-kotlin</artifactId>
    <version>[0.0.4,0.1.0)</version>
</dependency>

在我的主要课程中,我得到了以下内容:

object Bob {

    val log = LoggerFactory.getLogger(javaClass)
    val port = 9999

    @JvmStatic
    fun main(args: Array<String>) {

       DefaultVertx {
            httpServer(port = Bob.port, block = Route {
                GET("/") { request ->
                    headers().add("Author", "Re@PeR")
                    contentType("text/html")
                    sendFile("html/index.html")
                }
                otherwise {
                    setStatus(404, "Resource not found")
                    body {
                        write("The requested resource was not found\n")
                    }
                }
            });
       }


    }

转到localhost:9999 index.html正在成功投放。 我现在希望能够请求css / js文件并为它们提供服务

<!doctype html>
<html>
<head>
    <link rel="stylesheet" href="css/bootstrap.min.css" >
    <link rel="stylesheet" href="css/bootstrap-theme.min.css" >
    <script src="js/bootstrap.min.js"></script>

对于每个资源,浏览器会按预期返回错误404.

我现在正尝试使用

提供CSS
             GET("/css/*") {
                request ->
                    println("Serving CSS")
                    contentType("text/css")
                    sendFile("css/${request.path()}")
            }

但是我没有看到它进入该区块并继续提供404错误。

使用 org.jetbrains.kotlinx:vertx3-lang-kotlin 库在Vert.X中提供静态文件的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

它简单得多。
在您的示例中,它可能是:

router.route("/css/*").handler(StaticHandler.create());

但实际上,您应该将所有内容放在/ static或/ public文件夹下并将其设置为:

router.route("/static/*").handler(StaticHandler.create());

我的Kotlin应用程序通常看起来像:

val router = Router.router(vertx)

router.route().handler(StaticHandler.create())
// Other routes here...

以这种方式创建StaticHandler时,默认情况下它将从/resources/webroot目录服务。