Fork me on GitHub

Static assets

Intro

Ninja提供了一个特殊的控制器来帮助服务静态资产: AssetsController . AssetsController通过src / main / java / assets文件夹提供静态资产(如CSS,JavaScript和图像). 它提供对ETag和开箱即用缓存的支持.

AssetsController将为src / main / java / assets文件夹下的所有资产提供服务. 因此,您必须确保该文件夹及其子文件夹中没有敏感信息.

Serving static assets from a subdirectory

您可以通过以下途径启用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 ).

Serving static files from root

您还可以从资产目录中提供特定文件. 一个用例是robots.txt,应该可以在myserver.com/robots.txt上找到 .

为此,您可以使用以下路线:

router.GET().route("/robots.txt").with(AssetsController.class, "serveStatic");

此路由将从src / main / java / assets / robots.txt提供服务给您的静态robots.txt .

WebJars

由詹姆斯·沃德(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类型的创建.

实际上,WebJars并没有做任何魔术. 它仅使用Java Servlet 3.x约定,该约定允许引用和引用应用程序中库的META-INF / resources文件夹的任意静态资源.

Caching

静态资产不经常更改. 因此,Ninja支持两种基于浏览器的缓存功能:

  • ETags
  • Cache-Control

忍者会自动处理缓存. 它将正常工作. 好. 为了使开发更容易,默认情况下在测试和开发模式下禁用了缓存.

Caching settings

您可以通过application.conf文件中的两个参数来控制缓存:

  • http.useETag (默认为true)
  • http.cache_control (默认为3600)

http.useEtag将允许您打开和关闭基于ETag的资产缓存. http.cache_control将设置maxAge = XXX缓存控件标头.


by  ICOPY.SITE