Ninja提供了一个特殊的控制器来帮助服务静态资产: AssetsController . AssetsController通过src / main / java / assets文件夹提供静态资产(如CSS,JavaScript和图像). 它提供对ETag和开箱即用缓存的支持.
您可以通过以下途径启用AssetsController:
router.GET().route("/assets/{fileName: .*}").with(AssetsController.class, "serveStatic");
如果网站在<img src =" / assets / images / logo.png" />中引用图像,Ninja将在src / main / java / assets / images / logo.png中提供文件 . (通常这是在jar文件中发生的-但为清楚起见,我们使用src / main / java ).
您还可以从资产目录中提供特定文件. 一个用例是robots.txt,应该可以在myserver.com/robots.txt上找到 .
为此,您可以使用以下路线:
router.GET().route("/robots.txt").with(AssetsController.class, "serveStatic");
此路由将从src / main / java / assets / robots.txt提供服务给您的静态robots.txt .
由詹姆斯·沃德(James Ward)启动的WebJars项目( http://www.webjars.org/ )是一项出色的计划,它将良好的旧Java依赖项管理与静态Web库(如Bootstrap)结合在一起.
这意味着您可以例如通过以下方式将Bootstrap包含到您的项目中:
<dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>2.1.1</version> </dependency>
依赖关系当然是可传递的,并且还会引入jQuery(Bootstrap需要). 这样,就不再需要将依赖项复制到资产文件夹中.
为了激活对WebJars的支持,您需要向项目添加以下路由:
router.GET().route("/webjars/{fileName: .*}").with(AssetsController.class, "serveWebJars");
您可以通过以下URL从HTML页面引用Bootstrap:
<link href="/webjars/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
Bootstrap只是一个例子. 您可以使用更多的WebJars:jQuery,Ember.js,AngularJS等. 一切都无需下载和更新资产目录中的内容. 此外,所有经典WebJars都通过jsDeliver托管在公共CDN上. 遵循WebJars文档 ,只需在资产URL 前面加上//cdn.jsdelivr.net/webjars/即可使用它. 如果您使用的是Freemarker模板引擎,则隐式函数webJarsAt将基于配置属性管理这两种URL类型的创建.