动态生成静态页

    技术2022-05-11  31

    动态生成静态页思路: 1:建立一个html页面模板,在这个页面中把你想要动态显示的地方用特殊的字符串表示(如$htmlstrstr$); 2:在程序中用将这个html页面读到一个字符串变量如str; 3:用字符串的resplace方法将在第一步中特殊字符替换成你想要的内容; 4保存; return   null ; 207             } 208         } 209          /**/ 215          public   string  StartConvert( string [] htmlparam, string [] aspxparam) 216          {217            //先调用setTemplateFileparameter 和setAspxFileparameter方法,进行付值操作218            setTemplateFileparameter(htmlparam);219            setAspxFileparameter(aspxparam);220            //221            string fn=this.StartConvert();222            //223            _convertedFilename=fn;224            //225            return fn;226        } 227          228          /// <summary>229        /// 用时间加随机数生成一个文件名230        /// </summary>231        /// <returns></returns> 232          private   string  getfilename() 233          {234            //用时间加随机数生成一个文件名235            System.Threading.Thread.Sleep(50);236            string yearStr = System.DateTime.Now.Year.ToString();237            string monthStr = string.Format("{0:0#}",System.DateTime.Now.Month);238            string dayStr = string.Format("{0:0#}",System.DateTime.Now.Day); 239            string hourStr = string.Format("{0:0#}",System.DateTime.Now.Hour);240            string minuteStr = string.Format("{0:0#}",System.DateTime.Now.Minute);241            string secondStr = string.Format("{0:0#}",System.DateTime.Now.Second);242            string millisecondStr = string.Format("{0:000#}",System.DateTime.Now.Millisecond);                    243            System.Random rd = new System.Random();244            return yearStr + monthStr + dayStr + hourStr + minuteStr + secondStr + millisecondStr + string.Format("{0:0000#}",rd.Next(100))+".html";245            //return DateTime.Now.ToString("yyyyMMddHHmmss")+".html";246        } 247          /// <summary>248        /// 进行转换处理249        /// </summary>250        /// <returns>返回以时间命名的文件名</returns> 251          private   string  writeFile() 252          {253            254            // 读取模板文件255            string temp = HttpContext.Current.Server.MapPath(this.TemplateFilePath);256            StreamReader sr=null;            257            string str=""258            try259            {260                sr = new StreamReader(temp, this.TemplateHtmlCode);261                str = sr.ReadToEnd(); // 读取文件262            }263            catch(Exception ex)264            {265                //HttpContext.Current.Response.Write(exp.Message);266                //HttpContext.Current.Response.End();        267                WriteErrFile(ex);268            }269            finally270            {271                sr.Close();272            }            273            // 替换内容274            // 这时,模板文件已经读入到名称为str的变量中了275            for(int i=0;i<this.TemplateParamCount;i++)276            {277                str =str.Replace(this._templateFileparameter[i],this._aspxFileparameter[i]); 278            }        279280            return savefile(str); 281        } 282 283          /// <summary>284        /// 285        /// </summary>286        /// <param name="str"></param>287        /// <returns></returns> 288 289          private   string  savefile( string  str) 290          {291            // 写文件292            StreamWriter sw=null;293            try294            {295                296                string path = HttpContext.Current.Server.MapPath(this.HtmlFilePath);297                //html文件名称    298                string htmlfilename=getfilename();299                sw = new StreamWriter(path + htmlfilename , falsethis.Code);300                sw.Write(str);301                sw.Flush();302                return htmlfilename; 303            }304            catch(Exception ex)305            {                306                WriteErrFile(ex);307            }308            finally309            {310                sw.Close();311            }312            return "";313        } 314 315          /// <summary>316        /// 传入URL返回网页的html代码317        /// </summary>318        /// <param name="Url">URL</param>319        /// <returns></returns> 320          public   string  getUrltoHtml( string  Url) 321          {            322            try323            {324                System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);            325                System.Net.WebResponse wResp =wReq.GetResponse();                326                System.IO.Stream respStream  = wResp.GetResponseStream();                327                System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));328                return  savefile(reader.ReadToEnd());329330            }331            catch(System.Exception ex)332            {333                WriteErrFile(ex);334            }335            return "";336        } 337          #endregion 338 339 340          #region 构造        341        342        public AspxToHtml()343        {344            //345            // TODO: 在此处添加构造函数逻辑346            //            347        }348349        private void settemplateParamCount(int templateParamCount)350        {351            if (templateParamCount>0)352                this.TemplateParamCount=templateParamCount;353        }354        /// <summary>355        /// 提供欲代替的参数个数356        /// </summary>357        /// <param name="templateParamCount"></param>358        public AspxToHtml(int templateParamCount)359        {    360            settemplateParamCount(templateParamCount);361            362        }363        /// <summary>364        /// 365        /// </summary>366        /// <param name="templateParamCount">html模板页中的参数个数</param>367        /// <param name="htmlFilePath">生成的html文件所存放的文件夹路径</param>368        /// <param name="templateFilePath">html模板页路径</param>369        public AspxToHtml(int templateParamCount,string htmlFilePath,string templateFilePath)370        {371            settemplateParamCount(templateParamCount);372            this.HtmlFilePath        =    htmlFilePath;373            this.TemplateFilePath    =    templateFilePath;374            375        }376        #endregion 377 378          #region379        380        /// <summary>381        /// 把错误写入文件方法#region 把错误写入文件方法382        /// </summary>383        /// <param name="ee"></param>384        private  void WriteErrFile(Exception ee)385        {386            387            FileStream fs1 = new FileStream(HttpContext.Current.Server.MapPath(ErrLogPath), System.IO.FileMode.Append);388            StreamWriter sw1 = new StreamWriter(fs1);389            sw1.WriteLine("**************************************************");390            sw1.WriteLine("错误日期:" + System.DateTime.Now);391            sw1.WriteLine("错误描述:" + ee.Message);392            sw1.WriteLine("错误名称:" + ee.Source);393            sw1.WriteLine("详细:" + ee.ToString());394            sw1.WriteLine("*************************************************");395            sw1.Close();396        }397        #endregion 398     } 399 } 400 第二分参考资料 实现动态创建HTML文件的功能需要应用StreamReader和StreamWriter类。 在ASP.net中,String对象是不可改变的,每次使用该类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为新对象分配新的空间。在需要对字符串执行重复修改的情况下,就会增加系统开销。如果要修改字符串而不创建新的对象,则可以使用Sysmte.text命名空间下的StringBuilder类,该类可以改变字符串,当在一个循环中将许多字符串连接到一起时,使用StringBuildr类可以提高性能。 实现方法:首先使用StreamReader对象读取指定HTML模板文件内容,并把读取到的内容保存到StringBuilder对象中,然后通过for循环语句依次替换关键字段,最后再通过StreamWriter对象根据替换后新内容创建一个HTML文件。 代码如下: 页面文件: 新闻模板文件(template.html): <html>     <head>         <title>$htmlkey[0]</title>         <meta http-equiv="Content-Type" content="text/html; charset=gb2312">     </head>     <body >         <table $htmlkey[1] height="100%" border="0" width="100%" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" style="border:1px solid #000000">           <tr>             <td width="100%" valign="middle" align="left">     <span style="color: $htmlkey[2];font-size: $htmlkey[3]"><marquee>$htmlkey[4]</marquee></span>   </td>           </tr>         </table>     </body> </html> 页面文件:Dhtml.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Dhtml.aspx.cs" Inherits="Dhtml" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=" http://www.w3.org/1999/xhtml" > <head runat="server">   <title>Untitled Page</title> </head> <body>   <form id="Form1" method="post" runat="server">   <asp:Button id="btnCreate" style="Z-INDEX: 101; LEFT: 576px; POSITION: absolute; TOP: 48px"   runat="server" Text="创建HTML文件" OnClick="btnCreate_Click"></asp:Button>   <asp:TextBox id="txtContent" style="Z-INDEX: 102; LEFT: 208px; POSITION: absolute; TOP: 80px"   runat="server" TextMode="MultiLine" Height="402px" Width="352px"></asp:TextBox>   <asp:HyperLink id="hyCreateFile" style="Z-INDEX: 103; LEFT: 584px; POSITION: absolute; TOP: 96px"   runat="server" Target="_blank">创建的HTML文件</asp:HyperLink>   <asp:TextBox id="txtTitle" style="Z-INDEX: 104; LEFT: 208px; POSITION: absolute; TOP: 48px" runat="server"   Width="352px"></asp:TextBox>   <asp:Label id="Label1" style="Z-INDEX: 105; LEFT: 128px; POSITION: absolute; TOP: 48px" runat="server">页面标题</asp:Label>   <asp:Label id="Label2" style="Z-INDEX: 106; LEFT: 128px; POSITION: absolute; TOP: 80px" runat="server">页面内容</asp:Label> </form> </body> </html> 实现代码:Dhtml.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; using System.IO; public partial class Dhtml : System.Web.UI.Page {   protected void Page_Load(object sender, EventArgs e)   {   }   protected void btnCreate_Click(object sender, EventArgs e)   {     string[] newContent = new string[5];//定义和html标记数目一致的数组     StringBuilder strhtml = new StringBuilder();     try     {         //创建StreamReader对象         using (StreamReader sr = new StreamReader(Server.MapPath("TextBox") + "//template.html"))         {           string oneline;           //读取指定的HTML文件模板           while ((oneline = sr.ReadLine()) != null)           {             strhtml.Append(oneline);           }           sr.Close();         }     }     catch (Exception err)     {         //输出异常信息         Response.Write(err.ToString());     }     //为标记数组赋值     newContent[0] = txtTitle.Text;//标题     newContent[1] = "BackColor='#cccfff'";//背景色     newContent[2] = "#ff0000";//字体颜色     newContent[3] = "100px";//字体大小     newContent[4] = txtContent.Text;//主要内容     //根据上面新的内容生成html文件     try     {         //指定要生成的HTML文件         string fname = Server.MapPath("TextBox") + "//" + DateTime.Now.ToString("yyyymmddhhmmss") + ".html";         //替换html模版文件里的标记为新的内容         for (int i = 0; i < 5; i++)         {           strhtml.Replace("$htmlkey[" + i + "]", newContent );        }        //创建文件信息对象        FileInfo finfo = new FileInfo(fname);        //以打开或者写入的形式创建文件流        using (FileStream fs = finfo.OpenWrite())        {          //根据上面创建的文件流创建写数据流          StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));          //把新的内容写到创建的HTML页面中          sw.WriteLine(strhtml);          sw.Flush();          sw.Close();        }        //设置超级链接的属性        hyCreateFile.Text = DateTime.Now.ToString("yyyymmddhhmmss") + ".html";        hyCreateFile.NavigateUrl = "TextBox/" + DateTime.Now.ToString("yyyymmddhhmmss") + ".html";    }    catch (Exception err)    {        Response.Write(err.ToString());    }  }}  

    最新回复(0)