当前位置: 首页 > 知识库问答 >
问题:

vertx-web:我在哪里放置webroot文件夹?

云慈
2023-03-14

这应该是一个简单的过程,但还没有到目前为止。我一直在与vert合作。x 2表示一位,并切换到垂直。x 3最近。我想我应该尝试一个简单的vertx web示例,但无法通过一个简单的静态文件服务。

My server类包含以下代码段:

    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文件夹,和垂直。x无法找到以下各项:

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

每个“webroot”都包含一个索引。html和css/base。css文件。

第一个在我项目的根文件夹中。第二个在Maven resources文件夹中,第三个应该放在我的类路径上。在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时,我总是得到404:

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

还有什么我需要做的吗?

共有3个答案

水铭晨
2023-03-14

默认的类路径设置对我有效。我使用了以下层次结构:

将静态文件保存在目录中

<AppRoot>/src/main/resources/webroot/static/index.html

并按如下方式初始化vertx:

import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.StaticHandler;

Vertx vertx = Vertx.vertx();

Router router = Router.router(vertx);
router.route().handler(StaticHandler.create());

vertx.createHttpServer().requestHandler(router::accept).listen(8080);

现在您可以从以下URL访问它:<代码>http://localhost:8080/static/

有关更多信息,请参阅vertx web文档。

邴俊友
2023-03-14

在任何断点执行以下代码,它将告诉您将从中解析资源请求的根目录:

new File("").getCanonicalPath()

请求:localhost:8080/静态/脚本。js公司

处理程序:

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

该文件应位于MODULE\u ROOT/webroot/script中。js

一直调试到StaticHandlerImpl#sendStatic方法,查看文件的解析方式,并充分使用调试表达式窗口查询文件系统。

周凯捷
2023-03-14

我找到的解决方案取决于以下问题的答案:静态内容在运行时将位于何处,以及您希望vertx从何处提供服务?

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

然后,我将webroot文件夹放在启动jvm的目录下。在我的例子中,我使用的脚本保证jvm的cwd总是

如果要将静态内容打包到一个jar中,那么就简单了一点。您可以在jar中添加“webroot”作为资源,并将所有感兴趣的内容放在其中。在这种情况下,您不想禁用类路径解析,所以可以设置vertx。禁用filecpresolving为false,或者根本不进行设置。现在,当您运行vertx时,它将在jar文件中找到webroot,并将其内容提取到

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

 类似资料:
  • 我正在尝试运行Phusion Passenger,这是我得到的最远的。当它在网站上加载时,它就出现了 需要“rails/all”。。。0.550s捆扎机。要求1.510s[已弃用]I18n。enforce\u available\u locales将来将默认为true。如果确实要跳过区域设置的验证,可以设置I18n。强制\u available\u locales=false以避免此消息。应用初始

  • 我正在尝试为没有它们的包装提供类型: 我在带有打字稿 2.4.2 的 webpack 中使用 ts-loader,并且在 tsconfig.json 中设置了以下类型根: 我试图模仿: < code>index.d.ts中包含以下内容: 但是错误仍然存在。我做错了什么?我应该把那些自定义的. d.ts文件放在哪里? 和任何其他类型根之间有什么区别?为什么TypeScript会区别对待它们?

  • 问题内容: 我使用netfishs 6.7.1和glassfish v2.1编写了一个Web服务项目,将log4j.properties放入项目的根目录并使用: 在构造函数中: 在功能上: 但是,这是错误信息(实际上,我已经尝试将它几乎可以实现的每个目录都放入): 问题答案: 我知道回答这个问题有点晚了,也许您已经找到了解决方案,但是我将发布我找到的解决方案(在我进行大量Google搜索之后),因

  • 我正在为Vertx Web应用程序构建一个胖jar。我想提供一些静态文件。我用webroot文件夹打包了jar文件。有关我的jar结构,请参见下面的屏幕截图: 我能够加载webroot/静态/测试。通过执行以下操作创建html文件: 但是,我无法让静态处理程序工作。以下是我的完整代码: 在上述示例中,http://localhost:9999/static/test.html将显示“未找到”,而h

  • 问题内容: 启动程序时,我需要阅读一个文本文件。我正在使用eclipse并启动了一个新的Java项目。在我的项目文件夹中,我有“ src”文件夹和标准的“ JRE系统库” + staedteliste.txt …我只是不知道将文本文件放在何处。我确实尝试过我可以考虑的每个文件夹....我不能使用“硬编码”路径,因为文本文件需要包含在我的应用中… 我使用以下代码读取文件,但出现此错误: } 问题答案

  • 我下载了用于开发Java Servelet的Apache Tomcat,然后我也想到了使用PHP,我参考了这篇文章以获得有关为PHP设置Apache服务器的帮助,它说: 要配置Apache以运行PHP,请使用httpd。需要修改conf文件。该文件位于conf文件夹下的apache安装目录中。打开httpd。在EditRocket中创建conf文件,并执行以下操作: A.在所有LoadModule