Spark Web框架中静态文件应该放在哪里?

32

在使用Spark Web框架来服务静态文件时,我应该把文件放在哪里?

我在网上找不到任何相关信息 - 我开始怀疑自己对于类路径、相对路径等Eclipse和Java项目的知识是否存在问题。

Spark关于静态文件的这段话中提到了/public,但我不知道那个地方在哪里。我使用的是Windows操作系统,Eclipse Luna作为IDE,并且我的项目已经转换成使用Maven构建。

我尝试查看GitHub上的代码,但我在尝试寻找时有些力不从心。

4个回答

55

首先,您需要告诉Spark在哪里搜索静态文件,如下所示:

Spark.staticFiles.location("/public");

在Spark 2.5之前的版本中,您应该使用:

Spark.staticFileLocation("/public");

那么您的项目应该在资源文件夹下有一个名为public的文件夹,就像这样:

/src/main/resources/public/style.css

例如,我在那里添加了一个style.css文件,那么您应该按照以下方式访问它:

http://localhost:4567/style.css


如果您想要提供一个非类路径(non-classpath)文件夹,则应使用:

Spark.staticFiles.externalLocation("/path/to/dir");

在Spark 2.5以前的版本中,您应该使用:

Spark.externalStaticFileLocation("/path/to/dir");

我很快做出了决定,我试图为我提供的静态资源设置适当的MIME类型,最终我使用了一个过滤器来为某些静态资源设置适当的MIME类型。 - jmj
@JigarJoshi 如果你使用 staticFileLocation 来提供静态文件,那么你就不需要这样做。如果你手动注册一个带有 Spark.get 的 GET 请求来提供文件,那么是的,你需要手动设置标头。 - Pablo Matias Gomez
@JigarJoshi 也许你使用的是旧版本的Spark?我从未听说过有人遇到这个问题:/ - Pablo Matias Gomez
我正在使用2.3版本,这是目前为止的最新版本 - jmj
1
当我使用get("/post/:postId", (req, res) ->{...})时,静态文件路径变成了这样:http://0.0.0.0:4567/post/css/style.css,但正确的路径应该是http://0.0.0.0:4567/css/style.css - L. YanJun
显示剩余7条评论

3
我将样式表放在静态内容下方,如下所示:

staticFileLocation( "/web" );
/web/
  |-- index.html
  +-- styles/
        +
        +--- default.css

以及index.html

... <link href="styles/default.css" rel="stylesheet"   type="text/css" />

我还有其他生成的HTML页面,例如使用Freemarker。它们只收集路径:
  • /styles/default.css或
  • localhost:8081/styles/default.css
这是CSS方式索引获取它的方法。
来源:https://groups.google.com/d/msg/sparkjava/5vMuK_5GEBU/vh_jHra75u0J

2
  1. 在Eclipse中右键单击您的项目,选择创建新的->包。给新包一个名称等。

  2. 将静态资源放置在该包下,以确保它们位于类路径下。

  3. 在您的Main类代码中,调用staticFileLocation("yourpackagename/");

1
  1. 将您的公共目录放入 src/main/resources
  2. Spark.staticFileLocation("/public"); 替换为 Spark.staticFileLocation("public");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接