/// <summary> /// 合并模板和数据字典,生成静态文件,同时放入缓存中。 /// </summary> /// <param name="templateName">模板文件名称</param> /// <param name="dict">数据字典</param> /// <param name="absoluteFilePath">生成文件绝对路径(不包含物理路径)</param> /// <param name="isUseLocalCache">是否只使用本地缓存的方式存放静态文件</param> /// <returns>返回模板页面内容(去掉VM语法之后的结果),文件的内容</returns> private static string MergeAndGenerateFile(string templateName, Dictionary <string, object> dict, string absoluteFilePath, bool isUseLocalCache) { string fileContent = NVelocityBus.MergeVM(templateName, dict); if (!string.IsNullOrWhiteSpace(fileContent)) { if (isUseLocalCache) {//如果页面设置生成静态页面,并且该页面单独设置只使用本地缓存存放静态页面(例如:google爬虫收录的页面,因为量很大并且很集中,不适合放在Redis缓存中。)(一级缓存) UseLocalCache(absoluteFilePath, fileContent, true); } else { //使用本地缓存存放数据(一级缓存)。 UseLocalCache(absoluteFilePath, fileContent, !NVelocityBus.CACHE_REDIS); if (NVelocityBus.CACHE_REDIS) {//如果页面设置生成静态页面,并且网站设置使用Redis缓存存放静态页面 try { //写入Redis缓存(二级缓存)。 //StackExchangeRedisBus.StringSet(absoluteFilePath, ZipHelper.GZipCompress(fileContent), TimeSpan.FromDays(NVelocityBus.CACHE_DAY)); } catch (Exception) {//写入Redis失败 } } } } return(fileContent); }
/// <summary> /// 输出到客户端浏览器 /// </summary> /// <param name="request"></param> /// <param name="response"></param> /// <param name="templateName">Velocity模板文件名称</param> /// <param name="dict">Velocity模板文件所用到的数据字典</param> /// <param name="isGenerateFile">是否生成静态文件</param> /// <param name="isUseLocalCache">是否只使用本地缓存的方式存放静态文件(例如:Google爬虫收录的页面,只需要在本地生成静态文件。)</param> public static void Print(HttpRequest request, HttpResponse response, string templateName, Dictionary <string, object> dict, bool isGenerateFile, bool isUseLocalCache) { string fileContent = null; string absoluteFilePath = null; if (isGenerateFile) { absoluteFilePath = request.RequestContext.HttpContext.Items[NVelocityBus.NVELOCITY_TARGET_FILE_PATH] as string; //改从上下文对象里面获取,2015-11-17。 //当设置生成静态页面时才会生成静态的文件。 fileContent = NVelocityBus.MergeAndGenerateFile(templateName, dict, absoluteFilePath, isUseLocalCache); } else { //没有设置生成静态文件,并且不满足生成条件的,一律按动态页面处理。 fileContent = NVelocityBus.MergeVM(templateName, dict); } if (!string.IsNullOrWhiteSpace(fileContent)) { NVelocityBus.Output(request, response, fileContent, absoluteFilePath, isGenerateFile); } }