个人电子商务网站建设之——整站静态化实现的选择、设计与实现(二):静态页面的实现方式;
2011-09-05 19:07 stubman 阅读(904) 评论(0) 编辑 收藏 举报本系列文章记录近期本人开发过程中与静态化页面有关的内容与心得,整个系列分为,本篇为第二篇,目录如下:
- 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(一):选择静态实现;
- 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(二):静态页面的实现方式;
- 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(三):Cookie的使用;
- 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(四):静态页展现登陆状态,以及登陆及注销的实现原理;
- 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(五):静态产品页下单并过度到下单页面的实现原理;
- 个人电子商务网站建设之——整站静态化实现的选择、设计与实现(六):产品页面静态化优化原理与实现;
网页静态化的实现方式有不止一种,可以将模板页面存在数据库中,然后根据不同内容替换模板页面中的动态信息,最后保存处理过的HTML代码到
指定目录,这是一种方法,这个方法有缺点也有优点:
缺点:复杂,繁琐,如果网站需要改版,得首先修改模板内容,然后再重新生成;并且实现起来不是很直观,实现过程容易混乱;
优点:生成页面的时候不需要额外的提交HTTP请求,IIS负担减轻;
我用的是另外一种方法:直接开发的时候按动态网页的做,最后通过HttpWebRequest请求抓取指定页面的HTML,保存到指定路径,实现静
态化。选用这种方法当然也是有取舍的:
缺点:需要提交HttpWebRequest请求,生成静态页时IIS会有所负担;
优点:直观,简单,只需要将之前做的动态页中相应的路径进行小工作量的修改,即可进行抓取生成静态页;出了问题也方便调试;
直入主题,放代码:
-
/// <summary>
-
/// 发出http get请求 获取返回的信息
-
/// </summary>
-
/// <param name="url"></param>
-
/// <returns></returns>
-
private string HttpGet(string url)
-
{
-
string responseHTML = string.Empty;
-
try
-
{
-
string[] list = new string[2];
-
HttpWebRequest request = null;
-
HttpWebResponse response = null;
-
request = (HttpWebRequest)WebRequest.Create(url);
-
request.Method = "GET";
-
//返回HTML
-
response = (HttpWebResponse)request.GetResponse();
-
Stream dataStream = response.GetResponseStream();
-
StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding("UTF-8"));
-
responseHTML = reader.ReadToEnd();
-
}
-
catch
-
{ }
-
return responseHTML;
-
}
-
/// <summary>
-
/// 生成首页HTML页面
-
/// </summary>
-
private void InitHomePagePage()
-
{
-
string DefaultHtml = HttpGet(首页URL);
-
File.WriteAllText(首页存放路径, DefaultHtml, Encoding.GetEncoding("UTF-8"));
-
}
实现的原理很简单:确定要抓取的网页的URL,通过HttpWebRequest对象向网站提交此页面请求,获取相应的HTML代码,然后以指定文件名保存HTML到指定的路径下。这里只展示生成首页HTML页面的代码,并且是极其缩减版本,实际情况当然需要加一些路径的生成,目录判断与创建以及其他控制等等。其他页面的静态页生成的方法也大致类似。
当然,实际环境还要考虑其他一些问题,比如:有客户买了,需要触发式的生成对应的产品静态页以减少库存数;新上架一批产品,或者对一些产品进行修改之后,如何实现只生成需要生成的静态页,而不是所有产品静态页全部生成。这些的细节,以后的文章中会有所涉及。
在实施过程中,这个方法还遇到了一个麻烦,在将程序部署到虚拟空间上之后,生成不了,提示错误为:WebRequest 错误:Unable to connect to the remote server。网络上查了一下,有些人反映是所使用环境装了代理引起的错误,去咨询空间商的技术支持,表示没有这个问题,后考虑良久,并测试了一下,发现是服务器环境的DNS配置有问题,向客服人员反映,遂解决。 如何确定DNS是否有问题,请百度“NSLOOKUP”。