Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)归海一刀published in(发表于) 2014/1/30 0:50:55 .net生成静态页方法总结_[Asp.Net教程]
最近一直忙与公司网站新闻系统的重建工作,对于大中型新闻系统的架构也做了一定的了解,服务器缓存/URL重写什么的也做了一定了解. 现在根据公司要求是把新闻页生成静态页来处理,生成程序采用过几种方法,归纳一下几种方法的用法与区别. 第1种方法: 用server.Execute(path As String,writer As Sysetem.IO.TextWriter) 方法,这种方法很简单,向服务器放松动态网页请求,获取页面的客户端html代码,然后把内容写进文件里.这种方法写起来比较简单: 1 Dim swHtml As StringWriter = New StringWriter() 2 Server.Execute("http://localhost/newsSzhome/manage/newstemplate.aspx, swHtml) 3 Dim strContent As String = swHtml.ToString() 4 5 Dim filepath As String = "d//news//001.html" 6 If Not (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(filepath))) Then 7 System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(filepath)) 8 End If 9 Dim sw As StreamWriter = New StreamWriter(filepath, False, System.Text.Encoding.Default)10 Try11 sw.Write(strContent )12 Catch ex As Exception13 Throw ex14 Finally15 sw.Flush()16 sw.Close()17 End Try
这种方法是必须读网页地址,缺点显而易见:速度慢。另外如果请求的动态页面有验证控件的话,返回的html页面却无法进行数据验证。如果在同一个项目里的程序用这个还是很好的,但是如果是要把生成程序跟网页程序分开(如写成webservice)的话,用这个方法就相当与去打开一个外网网页,效率肯定会大打折扣(而且我在webservice上用这方法根本运行不了,程序出异常!具体原因没有去探索,估计应该是权限的问题). 第2种方法: 这个方法跟第1种方法相似(也是需要读取网页内容),用System.Net.WebRequest.Create(path As String)方法建里一个需要读取的网页的webRequest,再获得它的WebResponse,再以流的形式写入文件. System.Net.WebRequest 代码实例 1Dim wReq As System.Net.WebRequest = System.Net.WebRequest.Create("http://localhost/newsSzhome/manage/newstemplate.aspx" 2 Dim wResp As System.Net.WebResponse = wReq.GetResponse 3 Dim srs As System.IO.Stream = wResp.GetResponseStream 4 Dim sr As System.IO.StreamReader = New System.IO.StreamReader(srs, System.Text.Encoding.Default) 'GetEncoding("gb2312")) 5 Dim strContent As String = sr.ReadToEnd() 6Dim filepath As String = "d://news//0001.html" 7 If Not (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(filepath))) Then 8 System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(filepath)) 9 End If10 Dim sw As StreamWriter = New StreamWriter(filepath, False, System.Text.Encoding.Default)11 Try12 sw.Write(temp)13 Catch ex as Exception14 Throw ex15 Finally16 sw.Flush()17 sw.Close()18 End Try
效果就不多说了,跟第1种方法问题一样!(但是我在webservice中用上面这个方法生成时还是可以成功的,但是速度慢很多.)
第3种,就是最常用也最实用的字符替代方法String.Replace(),从文件读取模版,替换模版中的参数后输出文件,这种方法的生成速度上比第一种要快许多,而且模版内容可以用工具任意编辑主要代码:String.Replace方法 1 Dim sr As New System.IO.StreamReader("d://newsDetail_template.htm", System.Text.Encoding.Default) 2 Dim temp As String = sr.ReadToEnd() 3 temp = temp.Replace("@_CREATEDATE_@", DateTime.Now.ToString) 4 Dim filepath As String = "d://news//001.html" 5 If Not (System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(filepath))) Then 6 System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(filepath)) 7 End If 8 Dim sw As StreamWriter = New StreamWriter(filepath, False, System.Text.Encoding.Default) 9 Try10 sw.Write(temp)11 Catch12 Return false13 Finally14 sw.Flush()15 sw.Close()16 End Try
这个方法读取的是硬盘里的纯文件类型,在程序后台查询数据去替换掉模板文件里的特定字符.来源:http://www.cnblogs.com/micheng11
赞