从数据库教程中查询出title,content,datetime三个内容之后,分别替换掉模版中对应位置的{title},{content},{datetime}然后保存为xx.html一个静态页就生成了。
今天写的实例主要体现替换保存的步骤。
模版就不做了,直接整个body作为一个标签,把要做成静态页的动态页面的body部分当作是查询出的数据替换掉{body}部分,生成一张静态页。(首页静态可以这么做哦)。
1.使用serever.Excute
StreamWriter sw = new StreamWriter(Server.MapPath("html/Login.html"), false);
Server.Execute("ShowColumn.asp教程x?id=1&page=2", sw);
sw.Close();
2.替换字符
url重写
1.定义重写规则
urls.xml 变成urls.config
2.创建一个简单的实体urls类
3.urls类 获取urls.config文件中的所有url
4.httpmodule类处理 请求的地址
5.在web.config httpmodule节点添加
方法二上面的实现原理
先读取模版内容
#region 读取模版
private string template(string uri) {
string content;
StreamReader sr;
sr = File.OpenText(uri);
content = sr.ReadToEnd();
return content;
}
#endregion
模版是个空页面,因为我们主要模拟这个写入的读取模版写入保存的过程。
整张template.html文件中就一行$html$。
接着是获取目标页内容
#region 筛选内容
private string Content(string uri){
HtmlAgilityPack.HtmlWeb htmlWeb = new HtmlAgilityPack.HtmlWeb();
HtmlDocument hDoc = htmlWeb.Load(uri);
string content = hDoc.DocumentNode.InnerHtml;
return content;
}
#endregion
然后是将获取的目标页内容替换掉模版页的$html$部分
string tpuri = txtTp.Text;
string pageuri = txtUri.Text;
string tpcontent = Template(tpuri);
string pgcontent = Content(pageuri);
string result = tpcontent.Replace(“$html$”, pgcontent);
最后写个保存替换好的内容的方法
#region 保存为静态页
private void CreatePage(string result) {
StreamWriter sw;
sw = File.CreateText(“index.html”);
sw.Write(result);
sw.Close();
}
#endregion
最后完成生成静态页
string tpuri = txtTp.Text;
string pageuri = txtUri.Text;
string tpcontent = Template(tpuri);
string pgcontent = Content(pageuri);
string result = tpcontent.Replace(“$html$”, pgcontent);
CreatePage(result);
测试的时候路径会在IDE文件夹 整个过程就是这样。
如果要生成大批量的页面上面的看上去会有点问题,服务器负载哦,你懂的。
看个生成表态页面的类
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4. using System.Web;
5. using System.Net;
6. using System.IO;
7. using System.Text;
8. using System.Web.UI.HtmlControls;
9. using System.Text.RegularExpressions;
10.
11. ///
12. ///CreateHtml 的摘要说明
13. ///
14. public class CreateHtml:System.Web.UI.Page
15. {
16. public CreateHtml()
17. {
18. //
19. //TODO: 在此处添加构造函数逻辑
20. //
21. }
22. ///
23. /// 生成静态页面,生成位置是本项目下
24. ///
25. /// 请求的URL
26. /// 创建的路径及文件名,路径为相对路径
27. public bool Nei_Create(string strURL, string strRelPath)
28. {
29. string strFilePage;
30.
31. strFilePage = HttpContext.Current.Server.MapPath(strRelPath);
32. StreamWriter sw = null;
33. //获得aspx的静态html
34. try
35. {
36.
37. if (File.Exists(strFilePage))
38. {
39. File.Delete(strFilePage);
40. }
41. sw = new StreamWriter(strFilePage, false, System.Text.Encoding.GetEncoding("gb2312"));
42. System.Net.WebRequest wReq = System.Net.WebRequest.Create(strURL);
43. System.Net.WebResponse wResp = wReq.GetResponse();
44. System.IO.Stream respStream = wResp.GetResponseStream();
45. System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));
46. string strTemp = reader.ReadToEnd();
47.
48. Regex r1 = new Regex("", RegexOptions.IgnoreCase);
49. Regex r2 = new Regex("", RegexOptions.IgnoreCase);
50. Regex r3 = new Regex("", RegexOptions.IgnoreCase);
51.
52. Regex r4 = new Regex("");
54.
55. Regex r6 = new Regex("", RegexOptions.IgnoreCase);
56. strTemp = r1.Replace(strTemp, "");
57. strTemp = r2.Replace(strTemp, "");
58. strTemp = r3.Replace(strTemp, "");
59. strTemp = r4.Replace(strTemp, "");
60. strTemp = r5.Replace(strTemp, "");
61. strTemp = r6.Replace(strTemp, "");
62.
63. sw.Write(strTemp);
64. }
65. catch (Exception ex)
66. {
67. HttpContext.Current.Response.Write(ex.Message);
68. HttpContext.Current.Response.End();
69. return false;//生成到出错
70. }
71. finally
72. {
73. sw.Flush();
74. sw.Close();
75. sw = null;
76. }
77.
78. return true;
79. }
80. ///
81. /// 生成静态页面,生成位置不在本项目下
82. ///
83. /// 请求的URL
84. /// 创建的路径及文件名,路径为绝对路径
85. public bool Wai_Create(string strURL, string strRelPath,string filename)
86. {
87. string strFilePage;
88. strFilePage = strRelPath + "" + filename;
89. StreamWriter sw = null;
90. //获得aspx的静态html
91. try
92. {
93. if (!Directory.Exists(strRelPath))
94. {
95. Directory.CreateDirectory(strRelPath);
96. }
97. if (File.Exists(strFilePage))
98. {
99. File.Delete(strFilePage);
100. }
101. sw = new StreamWriter(strFilePage, false, System.Text.Encoding.GetEncoding("gb2312"));
102. System.Net.WebRequest wReq = System.Net.WebRequest.Create(strURL);
103. System.Net.WebResponse wResp = wReq.GetResponse();
104. System.IO.Stream respStream = wResp.GetResponseStream();
105. System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));
106. string strTemp = reader.ReadToEnd();
107.
108. Regex r1 = new Regex("", RegexOptions.IgnoreCase);
109. Regex r2 = new Regex("", RegexOptions.IgnoreCase);
110. Regex r3 = new Regex("", RegexOptions.IgnoreCase);
111.
112. Regex r4 = new Regex("");
114.
115. Regex r6 = new Regex("", RegexOptions.IgnoreCase);
116. strTemp = r1.Replace(strTemp, "");
117. strTemp = r2.Replace(strTemp, "");
118. strTemp = r3.Replace(strTemp, "");
119. strTemp = r4.Replace(strTemp, "");
120. strTemp = r5.Replace(strTemp, "");
121. strTemp = r6.Replace(strTemp, "");
122.
123. sw.Write(strTemp);
124. }
125. catch (Exception ex)
126. {
127. HttpContext.Current.Response.Write(ex.Message);
128. HttpContext.Current.Response.End();
129. return false;//生成到出错
130. }
131. finally
132. {
133. sw.Flush();
134. sw.Close();
135. sw = null;
136. }
137.
138. return true;
139.
140. }
141. public void FilePicDelete(string path)
142. {
143. System.IO.FileInfo file = new System.IO.FileInfo(path);
144. if (file.Exists)
145. file.Delete();
146. }
147. }
调用方法
new CreateHtml().Nei_Create("http://localhost:4032/new5mdn/default.aspx", "default.htm");