java – Vertx-web:我在哪里放置webroot文件夹?

前端之家收集整理的这篇文章主要介绍了java – Vertx-web:我在哪里放置webroot文件夹?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这应该是一个容易的,但并不是这么远.我一直在使用vert.x 2,并最近切换到vert.x 3.我以为我会尝试一个简单的vertx-web示例,但是不能超过一个简单的静态文件.

我的服务器类包含以下代码段:

HttpServer server = vertx.createHttpServer();
    Router router = ...;
    router.route("/static/*").handler(StaticHandler.create().setCachingEnabled(false));
    server.requestHandler(router::accept).listen(ctx.port);

我正在使用Eclipse,但也一直在尝试从命令行运行vertx.我也在使用Maven.我有三个webroot文件夹,而vert.x可以找到它们:

myproject/webroot
myproject/src/main/resources/webroot
myproject/src/main/java/webroot

这些“webroot”中的每一个都包含一个index.html和一个css / base.css文件.

第一个是在我的项目的根文件夹.第二个是在Maven资源文件夹中,第三个应该在我的类路径上平坦.在我的Eclipse运行配置中,我添加了myproject / src / main / resources / webroot到类路径,我确保我的工作目录设置为’myproject’.从命令行运行时,我在myproject目录中,我的脚本如下所示:

JAVA_OPTS="-Dmyproject.port=8099" CLASSPATH="src/main/java:src/main/resources:target/dependencies/*:target/classes" vertx run com.my.MyProject

无论如何,当我尝试以下任何URL时,我总是得到404s:

http://localhost:8099
http://localhost:8099/
http://localhost:8099/index.html
http://localhost:8099/static/css/base.css

还有什么我需要做的吗?

解决方法

我找到的解决方案取决于问题的答案:静态内容将在运行时在哪里,以及您希望vertx服务于哪里?

在我的情况下,安装的文件系统将是静态内容所在的位置(不在jar文件中),我希望vertx从该位置提供服务,以便可以实时更新.所以,我通过在vertx启动时将JVM系统属性vertx.disableFileCPResolving设置为true,禁用了StaticHandler中的类路径解析.

然后将webroot文件夹放在启动jvm的目录下.在我的情况下,我使用的脚本保证jvm的cwd始终是< app-root> / bin,所以删除< app-root> / bin / webroot中的内容就足够了.如果您不能保证jvm将从哪里启动,那么可能会更严格,因为您可能需要将绝对路径传递给指向此固定位置的StaticHandler.webroot(),但我认为有一个公开的问题关于支持(见here).

如果将静态内容打包到一个jar中,那会更简单一点.您可以在jar中添加“webroot”作为资源,并将所有感兴趣的内容放在那里.在这种情况下,您不想禁用类路径解析,因此请将vertx.disableFileCPResolving设置为false,或者不将其设置为false.现在当您运行vertx时,将在jar文件中找到webroot,并将其内容解压缩到< cwd> /.vertx / .file-cache-< guid> (其中cwd是从哪里开始的jvm),并从那里提供内容.请注意,如果您打算对内容进行实时更新,这是不可行的,因为当vertx关闭时,该目录下的文件的任何更改都将丢失,因为vertx-web将删除该目录.在重新启动时,它将再次从jar资源中检索原始文件,并且更改将丢失.

无论如何,希望这有帮助.

猜你在找的Java相关文章