我有以下执行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命令会改变我的静态目录吗?或者发生在这里的事情,我只是不明白:)。
答案 0 :(得分:1)
我找到了答案!
在我的freemarker / html文件中,我使用了相关部分,例如
<script src="./vis/vis.js"></script>
将它们更改为绝对路径可以解决问题:
<script src="/vis/vis.js"></script>
对于这个愚蠢的问题感到抱歉,但也许对其他人有帮助。