0

我有以下执行 Spark 的简单主类。

    Spark.port(4570);       
    final Configuration configuration = new Configuration(new Version(2, 3, 0));
    configuration.setClassForTemplateLoading(SparkHandler.class, "/");

    Spark.staticFileLocation("/public");

    Spark.get("/", (request, response) -> {

        // read patterns

        // attributes for web-interface.
        Map<String, Object> attributes = new HashMap<>();
        attributes.put("data", "someData");

        return new ModelAndView(attributes, "timeline.ftl");
    } , new FreeMarkerEngine());

一切都很好。当我访问http://localhost:4570/时,我得到了请求的网页!

我现在将 get 语句中的路径更改为/a/b/c但执行相同的代码:

    Spark.port(4570);   
    final Configuration configuration = new Configuration(new Version(2, 3, 0));
    configuration.setClassForTemplateLoading(SparkHandler.class, "/");

    Spark.staticFileLocation("/public");

    Spark.get("/a/b/c", (request, response) -> {

        // read patterns

        // attributes for web-interface.
        Map<String, Object> attributes = new HashMap<>();
        attributes.put("data", "someData");

        return new ModelAndView(attributes, "timeline.ftl");
    } , new FreeMarkerEngine());

如果我现在转到例如http://localhost:4570/a/b/c,它会返回消息,表明以前可以找到的大量资源不再可用。例如

INFO 28/07/16 14:45:03:请求的路由 [/a/b/vis/vis.js] 尚未在 Spark 中映射

但是,它恰好位于 /public/vis/vis.js 位置。

那 get 命令会改变我的静态目录吗?或者这里发生了什么我只是不明白的事情:)。

4

1 回答 1

1

我找到了答案!

在我的 freemarker/html 文件中,我使用了相关部分,例如

<script src="./vis/vis.js"></script>

将它们更改为绝对路径可以解决问题:

<script src="/vis/vis.js"></script>

抱歉这个愚蠢的问题,但也许它可以帮助其他人。

于 2016-07-28T05:06:38.667 回答