第一种方法是对一个aspx页面生成html文件,先对服务器发送请求aspx页面,取服务器返回的html流,写到一个html文件里,aspx页面显示的是什么,生成的html页面就是什么
1、asp方法:
sub createHTML
dim xmlhttp,strhtml,objAdoStream,i,myurl
set xmlhttp=server.CreateObject("Microsoft.XMLHTTP")
Randomize
i=Int((100 * Rnd) + 1)' 产生1到100之间的随机数,强制从数据库取数据
myurl="asp页面文件名.asp?i=" &i
xmlhttp.open "GET",myurl,false
xmlhttp.send
strhtml=xmlhttp.responsebody
set objAdoStream = Server.CreateObject("ADODB.Stream")
objAdoStream.Type = 1
objAdoStream.Open
objAdoStream.Write strhtml
objAdoStream.SaveToFile server.MapPath("default.htm"),2
objAdoStream.Close
response.Write("成生完毕")
end sub
2、VB.NET做脚本的时候的asp.net方法:(载自:http://erqie.bokee.com/5641140.html)
引用命名空间
Imports System.Net
Imports System.IO
Dim strHtml As String
Dim sr As StreamReader
Dim sw As StreamWriter
Dim code As Encoding = Encoding.GetEncoding("utf-8")
Dim HttpWebRequest As WebRequest
Dim HttpWebResponse As WebResponse
HttpWebRequest = WebRequest.Create("http://localhost/test.aspx")
HttpWebResponse = HttpWebRequest.GetResponse
sr = New StreamReader(HttpWebResponse.GetResponseStream, code)
strHtml = sr.ReadToEnd
sw = New StreamWriter(Server.MapPath("a.htm"), False, code)
sw.WriteLine(strHtml)
sw.Flush()
sw.Close()
Response.WriteFile(Server.MapPath("a.htm"))
3、用C#做脚本的asp.net的方法,这个是我自己写的,在《Visual C#.NET范例入门与提高》的P311,有对WebRequest和HttpRequest、HttpWebRequest、HttpWebResponse四个类的简单说明
//构造web请求,发送请求,获取响应
WebRequest HttpWebRequest = null;
WebResponse HttpWebResponse = null;
HttpWebRequest = WebRequest.Create(url);
HttpWebResponse = HttpWebRequest.GetResponse();
//获得流
sr = new StreamReader(HttpWebResponse.GetResponseStream(), code);
strHtml = sr.ReadToEnd();
//写入文件
try
{
sw = new StreamWriter(fna, false, code);
sw.Write(strHtml);
sw.Flush();
ok = true;
}
catch (Exception ex)
{
HttpContext.Current.Response.Write("<p>写入文件出错:" + ex.Message);
HttpContext.Current.Response.End();
ok = false;
}
finally
{
sw.Close();
}
return ok;
}
调用的时候这样:
第二种方法是用一个html模板生成一个html页面,模版里面有对应的标签,可以从数据库和别的地方取数据,填写这个标签,生成一个html页面,这个方法在很多新闻系统里有用到
我参考这里面的代码写的:http://www.webstudy8.com/web/net/201/065118272748882.html
private string CreateDetailPage(string EventID,string EventTitle, string EventBody, string EventTime, string EventStat)
{
//模版所有路径、模版文件名、生成的文件路径、生成的文件名
string path, temp, htmlfilepath,htmlfilename;
path = Server.MapPath("");
temp = Server.MapPath("testhtml.htm");
htmlfilepath = path;
htmlfilename = DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond.ToString() + ".html";
//读模版
Encoding code = Encoding.GetEncoding("gb2312");
StreamReader sr = null;
StreamWriter sw = null;
string str = "";
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // 读取文件
}
catch (Exception exp)
{
HttpContext.Current.Response.Write("<p>读取文件出错:" + exp.Message);
HttpContext.Current.Response.End();
sr.Close();
}
// 替换内容
// 对应模版里的设置要修改
str = str.Replace("re_symbol_EventID", EventID);
str = str.Replace("re_symbol_EventTitle", EventTitle);
str = str.Replace("re_symbol_EventBody", EventBody);
str = str.Replace("re_symbol_EventTime", EventTime);
str = str.Replace("re_symbol_EventStat", EventStat);
// 写文件
try
{
sw = new StreamWriter(htmlfilepath + "\\" + htmlfilename, false, code);
sw.Write(str);
sw.Flush();
}
catch (Exception ex)
{
HttpContext.Current.Response.Write("<p>写入文件出错:" + ex.Message);
HttpContext.Current.Response.End();
}
finally
{
sw.Close();
}
return htmlfilename;
}
调用的时候这样:
对比两种方法,我觉得第二种比第一种好,灵活,生成的速度快
因为第一种方法,要发送请求,请求在服务器端访问数据库,生成html流,返回客户端,我们要获取这个html流,第二种方法,只要访问数据库,取数据,读取文本文件(html模版),替换文本,就可以了
模板文件是静态的html页面,修改很方便,在asp.net里,如果生成一个aspx页面,当我们要改变页面的时候,我们要重新修改aspx页面,有时候我们要重新编译整个网站才可以运行,如果修改模板就没有这个问题了
记录生成静态文件后同一个项目的问题,《生成静态的shtml页面后,查询表单和aspx页面的连接方法》:user1/9/archives/2006/3223.html