利用HttpHandler生成静态页面

from : http://hsqzzzl.cnblogs.com/archive/2005/10/23/260122.html
看了静态页转换平台(StaticPol)-静态页生成终极解决方案后,就做了我现在放上来的这个东西,也是转成静态页面的,紧限于dotNet使用(我是用HttpHandler处理的),并且也很简单,主要是实现我想要的功能了,不足的地方肯定是很多的(后面我会提到两点),希望不是耽误你的时间。

源文件下载(文件未更新)

下面说说具体的实现:
1.Web.config里的配置
<!--配置策略config文件地址-->
<appSettings>
  <add key="ConfigFilePath" value="Config/StaticTactic.Config" />
</appSettings>
......(省略)
<!--配置httpHandler-->
<httpHandlers>
  <add path="*.aspx" verb="*" type="Hsq.Library.ToStaticPage.ProcessorHandler, ToStaticPage"/>
</httpHandlers>

2.策略配置文件
<!--
Rules.Root : 生成的静态页面在Web站点中的根目录文件夹
Rules.TimeSpan  : 默认的过期时间差(以 分钟 为单位)
ExpireTime : 过期时间
TimeSpan : 具体页面的过期时间差(以 分钟 为单位)
-->
<StaticTacConfig>
  <Rules Root="HTML" TimeSpan="10">
    <TacRule LookFor="Default.aspx">
      <ExpireTime>2005-10-23 1:34:21</ExpireTime>
      <TimeSpan>1</TimeSpan>
    </TacRule>
    <TacRule LookFor="Product/Sort.aspx">
      <ExpireTime>2005-10-23 1:42:01</ExpireTime>
      <TimeSpan>10</TimeSpan>
    </TacRule>
  </Rules>
</StaticTacConfig>

3.HttpHandler的实现
这个比较简单的,大家看看源代码就知道了。
主要是判断
请求的页面是否需要生成静态页面,
若需要,则判断 静态页面是否存在 或者存在但是否已经过期
不存在,或存在但过期的页面需要重新生成。

大概的过程就是这个样子了。这里我有两个问题:
1。在HttpHandler的实现里(Library文件夹下的ProcessorHandler.cs文件),第102行的代码如下
//保存配置文件,清除缓存
STConfig.Document.Save(STConfig.ConfigPath);
HttpContext.Current.Cache.Remove("StaticTacticConfig");
这个地方我是每次需要生成静态页面都将过期时间保存到策略配置文件中,并把该文件的缓存清空。
我觉得这个地方可以改进。。。希望大家给点意见
2。当访问/Product/Sort.aspx?Flag=1和/Product/Sort.aspx?Flag=1页面时会生成两个静态页面,但策略
配置文件中只有一条记录,也就是说只能保存一个过期时间,这个时候就会起冲突了。
这个是个策略的问题,今天有点晚了,明天再想想怎么处理好,也希望大家能给出好的方法。

BTW:这个格式好难调啊 :  (

每当我想要写点什么的时候,我的心理都会有些担心,因为对技术的研究我还不够深入,很怕说错或是做错了,
遭到大家的指责,所以都不敢怎么写。我很希望看到大家给我指出错误或是不足的地方,只要不是无端的鄙视或是漫骂...

posted @ 2005-11-11 22:31  苔苔以苔苔以苔  阅读(718)  评论(1编辑  收藏  举报
猪先飞