【问题标题】:Spark-Java static files location issueSpark-Java 静态文件位置问题
【发布时间】:2017-01-24 19:52:58
【问题描述】:

我从我的 main 方法中调用了 staticfiles.location("/public"),在任何其他 spark 方法之前,并且由于某种原因,只有静态文件目录下的一个目录正在使用缩短的路径。我的模板目录“public/templates”中的文件必须用“/public/templates/foo.vtl”调用,但是我的CSS目录中的文件“public/css”可以用“/css/bar.css”调用

我要注意的一点是,css 文件的缩写路径最初位于我的 .java 文件中,但现在位于我的模板文件之一中。它仍然适用于模板文件。为什么我的公共文件夹下无法识别我的模板文件夹,但我的 css 文件夹是?

我在这个项目中使用 IntelliJ idea。

这是我的代码,尽管它与 Spark 网站上的布局教程代码几乎相同。几周前我在 Netbeans 上遇到了类似的问题,切换 IDE 似乎解决了这个问题。这可能是我的 IDE 没有更新某种资源文件的问题吗?我难住了!这不是一个大问题,但我宁愿知道它为什么不起作用,也不愿继续幸福地无知。

    public static void main(String[] args) {
    staticFiles.location("/public");
    String layout = "public/templates/layout.vtl";
    //secure("public/keystore.jks", "password", null, null);

    get("/", (req, res) -> {
        HashMap model = new HashMap();
        model.put("template", "public/templates/main.vtl");
        return new ModelAndView(model, layout);
    }, new VelocityTemplateEngine());

    get("/page2", (req, res) -> {
        HashMap model = new HashMap();
        model.put("template", "public/templates/main2.vtl");
        return new ModelAndView(model, layout);
    }, new VelocityTemplateEngine());

这是我的文件夹结构的图像,以防上面的混乱文本没有多大意义:

编辑:根据请求,以下是我的目标目录的内容。

【问题讨论】:

  • 我建议您降级到 spark 2.3 并重试。请给我反馈。
  • @Laercio 我降级到 spark 2.3 并根据 2.3 文档将 staticFiles.location() 行更改为 staticFileLocation() ,但是在尝试加载具有缩短的模板时仍然收到相同的 500 错误路径而不是资源文件夹中的完整路径。
  • TheFunk,能否请您展示一下您在目标目录下的内容?
  • @Andrew Post 已更新 :)
  • TheFunk,你应该使用“templates/main.vtl”而不是“public/templates/main.vtl”(在所有情况下)。如果可行,请尝试编写。

标签: java intellij-idea template-engine static-files spark-java


【解决方案1】:

您必须使用 "templates/" 而不是 "public/templates/"

因为您指定的位置解释为 "public/public/templates" 并且它在您的目标目录下不存在。

当您创建 ModelAndView(model,templatePath) 时,您从布局变量(“public/templates/layout.vtl”)中指定了错误的值。您必须为每个模板设置路径。如下例所示。

【讨论】:

  • 这实际上与我认为的问题完全相反。我正在尝试设置我的静态文件位置,但是系统无法将 /templates 识别为有效路径。相反,它仅将 /public/templates 识别为有效路径。有趣的是,系统将 /css 识别为有效路径,并且该文件夹和模板文件夹都位于 public 下。
  • TheFunk,您能否尝试在 Eclipse IDE 中运行您的项目。如果您在 github 上有此代码,请给我发送链接,我将在 IDEA 上尝试。
  • 谢谢@Andrew,感谢您的帮助。我真的很难过。我不会问我是否至少先尝试了几件事。几周前我在 Netbeans 中遇到了同样的问题,然后切换到 IDEA,问题似乎得到了解决。我的代码可用here
  • 谢谢,但我认为我需要更好地解释我的问题。如您所知,我上面提供的代码不应该运行。正如你所说,路径应该指向 /public/public/templates/whatever.vtl。我遇到的问题是上面的代码实际上是在运行、编译和做我想要的。系统忽略了我的 staticFileLocation("/public") 行。是什么让它这样做?
  • TheFunk,所以你的问题是在开发过程中运行应用程序后文件没有更新?
猜你喜欢
  • 2021-05-10
  • 2016-08-05
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2011-11-21
  • 1970-01-01
  • 2016-10-14
相关资源
最近更新 更多