动态网页开发技术中,为了降低网站维护的工作量,常常用到动态页面技术。目前因特网上流行的做法是将网站中需要经常更新的数据存放到数据库中,当客户端浏览器向服务器发出HTTP请求时,服务器通过执行、解释某个程序,将运行结果以HTML格式传送至客户端浏览器,客户端浏览器接收、解释并显示。但服务器在执行这些程序时一般都要从数据库中查询并读取记录[1],这些操作都是以效率作为代价的。因为服务器端在执行程序时,查询、读取数据库中的数据,再生成这种HTML格式代码的过程显然需要消耗服务器资源,随着数据库中记录的不断增加,对访问量较大的网站来说会出现服务器的负担过重的情况。
对于静态页面来说,由于其页面本身存储的就是HTML静态文件,浏览器在访问这样的页面时,直接从服务器端把这些静态文件中的HTML代码传递到客户端浏览器即可。因此,在访问速度上,静态页面要比动态页面快很多。但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比修改编辑、阅读权限限制等,但是,对于一些我们经常频繁使用的文件,例如我们开发的新闻发布系统,我们不希望很多用户都读取数据库才显示结果,这样一方面消耗了服务器的资源,另一方面占去了浏览者大量可贵的响应时间,所以,就有了把动态网页“静态页面化”的做法,当前很多网站都采用这种技术(新浪、网易、搜狐等大型网站),这些静态页面显然不是一页一页手工做成的,那么,能否有更好的解决办法呢?
要解决这样的问题,一般都在网站的管理后台有一个网页信息发布程序,在网站内容管理员添加网页时直接利用管理后台的网页信息发布程序把页面存成HTML静态文件,这种页面从最终的结果来看是静态的,但它是通过动态技术生成的。
主要步骤:
1、创建模版html页
2、使用io流,根据模版页创建静态html
创建模版html页:
<!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> <title>ShowArticle</title> <body> biaoti <br> content<br> author </body> </HTML>
创建一个Helper类,里面有个WriteFile方法:
public class Helper { public static bool WriteFile(string strText, string strContent, string strAuthor) { string path = HttpContext.Current.Server.MapPath("~/news/"); Encoding code = Encoding.GetEncoding("UTF-8"); // 读取模板文件 string temp = HttpContext.Current.Server.MapPath("~/news/template.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(); return false; } finally { sr.Close(); } string htmlfilename = DateTime.Now.ToString("yyyyMMddHHmmss") + ".html"; // 替换内容 // 这时,模板文件已经读入到名称为str的变量中了 str = str.Replace("ShowArticle", strText); //模板页中的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(); return false; } finally { sw.Close(); } return true; } }
接下来只要在需要创建静态html的页面中调用上面的方法就可以了。例如:
bool result = Helper.WriteFile(this.txtBiaoti.Text.Trim(), this.txtContent.Text.Trim(), this.txtAuthor.Text.Trim());
if (result)
{
Response.Write("HTML生成成功!");
}
else
{
Response.Write("HTML生成失败!");
}