利用HttpHandler生成静态页面

看了静态页转换平台(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 on 2008-03-25 13:30  恋地高飞  阅读(787)  评论(0编辑  收藏  举报

导航