• 关于HTML静态页面(含自动分页)生成的可行性方案


    首先基础的命名空间别忘记,下面是所要用到的几个命名空间
    c# 代码
     
    1. using  System.IO;   
    2. using System.Text;   
    3. using System.Net;  
    接下来要设定附件上传的位置设定了
    c# 代码
     
    1. //文章默认存放的绝对路径   
    2.      private string FilePageDir = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["NewsFiles"]);   
    下面是生成文件的主体了,主要是生成时候的内容以及分割几块
    c# 代码
     
    1. #region 生成批量新闻数据   
    2.        /// <summary>   
    3.        /// 生成批量新闻数据   
    4.        /// </summary>   
    5.        /// <param name="getData"></param>   
    6.        public void FilePageForCreate(Hashtable getData)   
    7.        {   
    8.            string strDate = getData["pStrDate"].ToString();//目录   
    9.            string strFileName = getData["pStaticPageName"].ToString();//目录及文件名   
    10.            string strTitle = getData["pTitle"].ToString();//标题   
    11.            string strContent = getData["pContent"].ToString();//内容   
    12.            string strNewsSortID = getData["pNewsSortID"].ToString();//分类ID   
    13.            string strCreateTime = getData["pCreateTime"].ToString();//创建时间   
    14.            string strCreateUserName = getData["pCreateUserName"].ToString();//发布人   
    15.            string strNewsFrom = getData["pNewsFrom"].ToString();//来源   
    16.            string strLink = getData["pLink"].ToString();//链接   
    17.            string strCreateUserID = getData["pCreateUserID"].ToString();//创建人ID   
    18.            string strAssistantTitle = getData["pAssistantTitle"].ToString();//副标题   
    19.            string strHit = getData["pHit"].ToString();//点击数量   
    20.            string strKeyword = getData["pKeyword"].ToString();//关键字   
    21.            string strNewsID = getData["pNewsID"].ToString();//新闻ID   
    22.            string strHtmlHeader = getData["pHtmlHeader"].ToString();//表头   
    23.            string strNewsSortName = getData["pNewsSortName"].ToString();//分类名   
    24.   
    25.   
    26.            strContent = strContent.Replace("$$分页$$""|");   
    27.            string[] content = strContent.Split(new Char[] { | });//对内容进行拆分,并保存到数组   
    28.            int upbound = content.Length;//数组的上限   
    29.   
    30.            ///////////////////////////创建当前日期的文件夹开始   
    31.            string dir = FilePageDir + DateTime.Now.ToString("yyMMdd");//用来生成文件夹   
    32.            if (!Directory.Exists(dir))   
    33.            {   
    34.                Directory.CreateDirectory(dir);   
    35.            }   
    36.            /**/  
    37.            ///////////////////////////创建当前日期的文件夹结束   
    38.            try  
    39.            {   
    40.                for (int i = 0; i < content.Length; i++)   
    41.                {   
    42.                    //string[] newContent = new string[4];//定义和html标记数目一致的数组   
    43.   
    44.                    StringBuilder strhtml = GetFileCode(FilePageDir + "\\NewsDetailTemplate.html");//读取模板   
    45.   
    46.   
    47.   
    48.                    //为标记数组赋值   
    49.                    string strTable = "<table><tr><td  style=\"font-size:12px\">$upUrl</td><td style=\"font-size:14px\">$Number</td><td style=\"font-size:12px\">$downUrl</td></tr></table>";//上下页表格,注意此处的$upUrl(上一页),$Number(页码分页),$downUrl(下一页)   
    50.                    //这三个是用来替换的。   
    51.   
    52.                    string filePath = "";   
    53.   
    54.   
    55.   
    56.   
    57.                    strhtml = strhtml.Replace("$NewsSortName", strNewsSortName);   
    58.                    strhtml = strhtml.Replace("$HtmlHeader", strHtmlHeader);   
    59.                    strhtml = strhtml.Replace("$NewsSortID", strNewsSortID);   
    60.                    strhtml = strhtml.Replace("$CreateUserName", strCreateUserName);   
    61.                    strhtml = strhtml.Replace("$NewsFrom", strNewsFrom);   
    62.                    strhtml = strhtml.Replace("$Link", strLink);   
    63.                    strhtml = strhtml.Replace("$CreateUserID", strCreateUserID);   
    64.                    strhtml = strhtml.Replace("$AssistantTitle", strAssistantTitle);   
    65.                    strhtml = strhtml.Replace("$Hit", strHit);   
    66.                    strhtml = strhtml.Replace("$Keyword", strKeyword);   
    67.                    strhtml = strhtml.Replace("$Title", strTitle);   
    68.                    strhtml = strhtml.Replace("$NewsId", strNewsID);   
    69.                    strhtml = strhtml.Replace("$CreateTime", DateTime.Now.ToString("yyyy/MM/dd"));   
    70.                    strhtml = strhtml.Replace("$Content", content[i]);   
    71.                    string strNumber = "";//数字分页1,2,3……   
    72.                    for (int m = 1; m <= upbound; m++)   
    73.                    {   
    74.                        if (m == 1)//如果是第一页就显示成这个样子:20070524.html而不是20070524_1.html   
    75.                            strNumber = strNumber + " [" + "<a href=" + "../" + strDate + ".html" + ">" + m + "</a>" + "] ";   
    76.                        else  
    77.                        {   
    78.                            int n = m - 1;//第三页的连接应该是20070524_2.html,以此类推   
    79.                            strNumber = strNumber + " [" + "<a href=" + "../" + strDate + "_" + n + ".html" + ">" + m + "</a>" + "] ";   
    80.                        }   
    81.                    }   
    82.                    if (upbound == 0)//如果没有分页,就直接按日期时间保存   
    83.                    {   
    84.                        filePath = FilePageDir + "//" + strDate + ".html";   
    85.                        strhtml = strhtml.Replace("$Pager""");   
    86.                    }   
    87.                    else//否则按20070524.html、20070524_1.html 这种效果保存   
    88.                    {   
    89.                        strNumber = strNumber.Replace(">" + (i + 1) + "<""><u><b>" + (i + 1) + "</b></u><");   
    90.   
    91.                        if (i == 0)   
    92.                            filePath = FilePageDir + "//" + strDate + ".html";   
    93.                        else  
    94.                            filePath = FilePageDir + "//" + strDate + "_" + i + ".html";   
    95.   
    96.                        if (i == 0)//第一页不显示上一页   
    97.                            strTable = strTable.Replace("$upUrl""");   
    98.   
    99.                        if (i <= 1)//上一页分页   
    100.                            strTable = strTable.Replace("$upUrl""<a href=" + "../" + strDate + ".html" + ">上一页</a>");   
    101.                        else  
    102.                        {   
    103.                            int p = i - 1;   
    104.                            strTable = strTable.Replace("$upUrl""<a href=" + "../" + strDate + "_" + p + ".html" + ">上一页</a>");   
    105.                        }   
    106.   
    107.                        if (upbound == 1)//如果只有一页,则不显示页码   
    108.                            //strNumber="";   
    109.                            strTable = strTable.Replace("$Number""");   
    110.                        else  
    111.                            strTable = strTable.Replace("$Number", strNumber);//页码替换   
    112.                        /**/  
    113.                        ////////////////////////   
    114.                        if (i == upbound - 1)//最后一页不显示下一页   
    115.                            strTable = strTable.Replace("$downUrl""");   
    116.   
    117.                        if (i != upbound - 1)//下一页分页   
    118.                        {   
    119.                            int q = i + 1;   
    120.                            strTable = strTable.Replace("$downUrl""<a href=" + "../" + strDate + "_" + q + ".html" + ">下一页</a>");   
    121.                        }   
    122.                        else  
    123.                        {   
    124.                            int j = upbound - 1;   
    125.                            strTable = strTable.Replace("$downUrl""<a href=" + "../" + strDate + "_" + j + ".html" + ">下一页</a>");   
    126.                        }   
    127.   
    128.                        strhtml = strhtml.Replace("$Pager", strTable);   
    129.                    }   
    130.   
    131.   
    132.                     RunFilesBuild(strhtml,filePath);//生成页面   
    133.   
    134.                }   
    135.            }   
    136.            catch (Exception ex)   
    137.            {   
    138.                //输出异常信息   
    139.                // Response.Write(err.ToString());   
    140.                ITNB.Base.Error.showError(ex.Message.ToString());   
    141.            }   
    142.   
    143.        }  
    144.        #endregion  

    最后当然是文件输出的方法了,这个相对来说比较的简单点了,大陆通用的方法

    c# 代码
     
    1. #region 生成文件   
    2.        /// <summary>   
    3.        /// 生成文件   
    4.        /// </summary>   
    5.        /// <param name="strhtml">数据内容</param>   
    6.        /// <param name="filePath">路径</param>   
    7.        public void RunFilesBuild(StringBuilder strhtml, string filePath)   
    8.        {   
    9.            //创建文件信息对象--------------------------------------------   
    10.            FileInfo finfo = new FileInfo(filePath);   
    11.            //以打开或者写入的形式创建文件流   
    12.            using (FileStream fs = finfo.OpenWrite())   
    13.            {   
    14.                //根据上面创建的文件流创建写数据流   
    15.                StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);   
    16.                //把新的内容写到创建的HTML页面中   
    17.                sw.WriteLine(strhtml);   
    18.                sw.Flush();   
    19.                sw.Close();   
    20.            }   
    21.   
    22.        }  
    23.       
    24.        #endregion  

    一点建议:
    生成文件最好是SHTML的,当然这个前提是要服务器允许且支持SSI,至于如何做网上有很多的教程的,自己去搜索一下吧,来说说好处吧:
    shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来
    换句话说:就是可以使用一些类似ASP的特性的功能,例如文件包含,文件调用等!

    目前,主要有以下几种用用途:

    1、显示服务器端环境变量<#echo>

    2、将文本内容直接插入到文档中<#include>

    3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)

    4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)

    5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI<XSSI>可设置变量使用if条件语句。 

    例子:<!--#include file="info.htm"--> 

    具体如何做,关于这方面的资料网上随便搜罗都一堆,就不详细说明了!

  • 相关阅读:
    IntelliJ IDEA生成 Serializable 序列化 UID 的快捷键
    spring boot rabbitmq 多MQ配置 自动 创建 队列 RPC
    JAVA使用并行流(ParallelStream)时要注意的一些问题
    深入浅出Stream和parallelStream
    JAVA8 十大新特性详解
    redis客户端连接,最大连接数查询与设置
    如何在Java 8中愉快地处理日期和时间
    Jenkins:使用Git Parameter插件实现tag或分支的选择性构建
    Java正确获取客户端真实IP方法整理
    redis问题接囧办法及经验
  • 原文地址:https://www.cnblogs.com/lds85930/p/1216284.html
Copyright © 2020-2023  润新知