我在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中提供静态文件的正确方法是什么?
答案 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
目录服务。