为什么我的静态路由在使用get请求时会在spark框架中发生变化?

时间:2016-07-28 04:55:42

标签: spark-framework

我有以下执行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,它会返回以前可能找不到的大量资源不再可用的消息。 E.g。

  

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

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

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

1 个答案:

答案 0 :(得分:1)

我找到了答案!

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

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

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

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

对于这个愚蠢的问题感到抱歉,但也许对其他人有帮助。