예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
            }
        }