首页 > 编程 > .NET > 正文

ASP.Net/asp 生成静态HTML页

2024-07-10 13:11:47
字体:
来源:转载
供稿:网友

环境:microsoft .net framework sdk v1.1

os:windows server 2003 中文版

asp.net生成静态html页

在asp中实现的生成静态页用到的filesystemobject对象!

在.net中涉及此类操作的是system.io

以下是程序代码 注:此代码非原创!参考别人代码

//生成html页

  public static bool writefile(string strtext,string strcontent,string strauthor)

  {

   string path = httpcontext.current.server.mappath("/news/");

   encoding code = encoding.getencoding("gb2312");

   // 读取模板文件

   string temp = httpcontext.current.server.mappath("/news/text.html");

   streamreader sr=null;

   streamwriter sw=null;

   string str="";  

   try

   {

    sr = new streamreader(temp, code);

    str = sr.readtoend(); // 读取文件

   }

   catch(exception exp)

   {

    httpcontext.current.response.write(exp.message);

    httpcontext.current.response.end();

    sr.close();

   }
   

   string htmlfilename=datetime.now.tostring("yyyymmddhhmmss")+".html";

   // 替换内容

   // 这时,模板文件已经读入到名称为str的变量中了

   str =str.replace("showarticle",strtext); file://模板页中的showarticle

   str = str.replace("biaoti",strtext);

   str = str.replace("content",strcontent);

   str = str.replace("author",strauthor);

   // 写文件

   try

   {

    sw = new streamwriter(path + htmlfilename , false, code);

    sw.write(str);

    sw.flush();

   }

   catch(exception ex)

   {

    httpcontext.current.response.write(ex.message);

    httpcontext.current.response.end();

   }

   finally

   {

    sw.close();

   }

   return true;



此函数放在conn.cs基类中了

在添加新闻的代码中引用 注:工程名为hover
 

    if(hover.conn.writefilethis.title.text.tostring),this.content.text.tostring),this.author.text.tostring)))

    {

     response.write("添加成功");

    }

    else

    {

     response.write("生成html出错!");

    }

-------------------------------------------------------------------------

模板页text.html代码

-------------------------------------------------------------------------

<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >

<html>

 <head>

  <title>showarticle</title>

  

 <body>

 biaoti

 <br>

 content<br>

 author

 </body>

</html>


------------------------------------------------------------------------

提示添加成功后会出以当前时间为文件名的html文件!上面只是把传递过来的几个参数直接写入了html文件中,在实际应用中需要先添加数据库,然后再写入html文件

而且需要把生成的文件名等写入数库以便以后调用等,此实例只是实现了根据提交过来参数替换模板中的相应的字段! 需要完善的地方很多!哪位有高见,欢迎赐教!




asp.net生成静态html页! 2004-06-01 13:36 kriss

我找到我想用的方法了:

using system.web.hosting;



webhost host = (webhost)applicationhost.createapplicationhost(

typeof(webhost), name, path);



public void dorequest(string page, string query, textwriter writer) {

httpruntime.processrequest(new simpleworkerrequest(page, query, writer));

}


这样我就可以直接把一个aspx文件产生html文件了

filestream fs = file.open("default.htm");

host.dorequest("default.aspx",string.empty,fs); 

asp生成静态网页的方法 


随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用access作数据库的更会深有体会,静态页加在搜索时,也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的asp页直接生成静态页,将会节省很多。


  下面的例子是将、index.asp?id=1/index.asp?id=2/index.asp?id=3/这三个动态页面,分别生成ndex1.htm,index2.htm,index3.htm存在根目录下面:


<%

dim strurl,item_classid,id,filename,filepath,do_url,html_temp

html_temp="<ul>"

for i=1 to 3

html_temp = html_temp&"<li>"

item_classid = i

filename = "index"&item_classid&".htm"

filepath = server.mappath("/")&"/"&filename

html_temp = html_temp&filepath&"</li>"

do_url = "http://"

do_url = do_url&request.servervariables("server_name")&"/main/index.asp"

do_url = do_url&"?item_classid="&item_classid



strurl = do_url

dim objxmlhttp

set objxmlhttp = server.createobject("microsoft.xmlhttp")

objxmlhttp.open "get",strurl,false

objxmlhttp.send()

dim binfiledata

binfiledata = objxmlhttp.responsebody

dim objadostream

set objadostream = server.createobject("adodb.stream")

objadostream.type = 1

objadostream.open()

objadostream.write(binfiledata)

objadostream.savetofile filepath,2 

objadostream.close()


next

html_temp = html_temp&"<ul>"

%>



<%

response.write ( "成功生成文件:" )

response.write ( "<br>" )

response.write html_temp

%>






<!--#include file="conn.asp"-->

<%

dim str

function menu(id)

set rs=server.createobject("adodb.recordset")

sql="select * from menu where id1="&id&" order by url,id"

rs.open sql,conn,1,1

str=str+"<table border='0' cellspacing='0' cellpadding='0'>"+chr(13)

i=1

while not rs.eof

childcount=conn.execute("select count(*) from menu where id1="&rs("id"))(0)

if childcount=0 then

 if i=rs.recordcount then

  menutype="file1"

 else

  menutype="file"

 end if

 menuname="<a href='"&rs("url")&"' target='_blank'>"&rs("menuname")&"</a>"

 onmouseup=""

else

 if i=rs.recordcount then

  menutype="menu3"

  listtype="list1"

  onmouseup=" onmouseup=change1('a"&rs("id")&"','b"&rs("id")&"');"

 else

  menutype="menu1"

  listtype="list"

  onmouseup=" onmouseup=change2('a"&rs("id")&"','b"&rs("id")&"');"

 end if

 menuname=rs("menuname")

end if

str=str+"<tr><td id='b"&rs("id")&"' class='"&menutype&"'"&onmouseup&">"&menuname&"</td></tr>"+chr(13)

if childcount>0 then

str=str+"<tr id='a"&rs("id")&"' style='display:none'><td class='"&listtype&"'>"+chr(13)

menu(rs("id"))

str=str+"</td></tr>"+chr(13)

end if

rs.movenext

i=i+1

wend

str=str+"</table>"+chr(13)

rs.close

set rs=nothing

end function

menu(0)

set fso=server.createobject("scripting.filesystemobject")

set f1=fso.opentextfile(server.mappath("demo.htm"),2,true)

f1.write("<!doctype html public '-//w3c//dtd html 4.01 transitional//en' 'http://www.w3.org/tr/html4/loose.dtd'>")

f1.write("<html>")

f1.write("<head>")

f1.write("<meta http-equiv='content-type' content='text/html; charset=gb2312'>")

f1.write("<title>哈哈~~~!这回速度超快了吧?</title>")

f1.write("<meta name='keywords' content='asp2004,树,菜单,无限级'>")

f1.write("<meta name='author' content='小灰,[email protected]'>")

f1.write("<link href='style.css' rel='stylesheet' type='text/css'>")

f1.write("<script language='javascript' src='function.js'></script>")

f1.write("</head>")

f1.write("<body>")

f1.write("<a href='http://asp2004.net' target='_blank'>http://asp2004.net</a>提供最新下载《<a href='menu.asp'>管理</a>》<br>")

f1.write(str)

f1.write("</body>")

f1.write("</html>")

f1.close

set fso=nothing

response.redirect("demo.htm")

%>



不用模板,只用asp+fso生成静态html页的一个方法(对于内容密集型页面特别适用)

fso生成静态html文件的时候替换模板标签一直是一个很麻烦的问题,至少我是这么认为的,还要别外做一个模板,麻烦!,我今天看见有一个方法可以解决这个问题

如一个正常的index.asp页面,并且用asp代码调出数据库中的内容,另建一个makehtml.asp的页面,加入一个textarea域,假设为name="body",将index.asp在textarea里调出来,如:

<textarea name="body"><!--#include file="index.asp"--></textarea>,将这个textarea包含在表单中,在接收表单页用创建fso对象,如下生成index.html文件!

<%

filename="../index.html"

if request("body")<>"" then

set fso = server.createobject("scripting.filesystemobject")

set fout = fso.createtextfile(server.mappath(""&filename&""))

fout.write request.form("body")

fout.close

set fout=nothing

set fso=nothing

end if

%>

这样index.html文件就生成了,连模板都用不着,只要将正常情况下使用的asp文件读取到textarea里就可以了,目前尚未发现问题!当然前提是服务器要支持fso

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表