我正在编写一个Grails / GSP应用程序,当没有网络时,该应用程序需要脱机运行。我阅读了关于HTML5 Offline / AppCache的以下文章,这些文章非常有用:
总结(tl;dr
),我需要在每个页面的manifest
元素中定义<html>
属性,如下所示:
<html manifest="myapp-cache.manifest">
...
</html>
其中myapp-cache.manifest
是&#34;缓存清单的名称&#34;指定脱机/缓存行为的文件,可能如下所示:
CACHE MANIFEST
NETWORK:
*
CACHE:
index.html
somethingCool.html
myimage.png
myapp.css
问题在于,使用Grails,我将无法缓存HTML文件。实际上,我可能有index.gsp
和somethingCool.gsp
,但它们代表预处理的HTML,永远不会作为HTML文档存在。我无法在缓存清单中指定GSP,因为GSP可以(并且不应该)从客户端直接获取。
当我们开始重用诸如header.gsp
和footer.gsp
之类的GSP,标记库等等时,事情变得更加复杂。
所以我问: Grails是否支持HTML5离线?如果是这样,如何以及以何种身份(文档在哪里)?如果没有,是否还有强制Grails脱机兼容?或Grails无法使用此HTML5功能?
也许这可以通过URL映射以某种方式完成?例如,也许有一种方法可以让Grails将请求从http://myapp.example.com/fizzbuzz.html
映射到http://myapp.example.com/fizzbuzz
,然后提示Grails调用正确的控制器操作,并呈现正确的GSP?
答案 0 :(得分:1)
你的陈述“我将没有要缓存的HTML文件”是错误的。 Grails是一个服务器端框架,虽然您在服务器端使用GSP,标记库等,但您所看到的所有客户端(浏览器)都是纯HTML。
因此,缓存.gsp应该是完全正常的,因为所有浏览器都会获得并且缓存是Grails提供的HTML。不要被扩展混淆!离线时,浏览器将以与.html相同的方式从AppCache获取HTML。
AppCache是一种客户端技术,因此我怀疑有一般服务器端技术的特定文档,特别是Grails,因为它对任何服务器端技术都是一样的。
@sneeb Grails可以提供您希望的任何格式的内容,HTML,JSON,XML等。因此,Grails支持任何类型的内容,包括HTML5。
答案 1 :(得分:0)
我意识到这是一个老问题,但我想提一下:只要每个页面都包含清单属性,您就不需要在缓存清单文件中包含每个html页面。当浏览器看到清单属性时,它足够聪明,可以缓存当前页面以及清单文件中的所有内容。
我从未尝试过,但我相信这意味着您可以在主模板中包含manifest属性,然后每个使用主模板的页面都会与清单文件的内容一起缓存。