利用UrlRewrite,asp.net动态生成htm页面(补充说明2)

前几天写了两篇关于URL重写时,生成静态页面的随笔。

利用UrlRewrite,asp.net动态生成htm页面
利用UrlRewrite,asp.net动态生成htm页面(补充说明)
今天把原来的思路给整理了一下,原来需要两个类(ModuleRewriterCreateHtmFactoryHandler)才能完成整个过程,现在只用ModuleRewriter就可以了,我画了个流程图


关键类ModuleRewriter代码
Code

现在提供的源代码是最新的,日期为2008-7-17,这次修改的地方有:
1,对正则表达式实例,做了缓存
2,使用线程池,提高了效率
3,修改了其他一些代码,减少了访问页面的等待时间
原代码和演示示例 下载
posted @ 2008-02-15 11:26 王庆 阅读(4258) 评论(28)  编辑 收藏 网摘 所属分类: Asp.Net 2.0

  回复  引用  查看    
#1楼2008-02-15 12:27 | Superstone      
这些天我也在考虑生成静态页面,请教个问题,在不考虑服务器内存的情况下,生成HTML与CACHE之间怎么取舍,我想来想去都觉得我们自己生成HTML的这些工作,CACHE都可以为我们做到了,那还要生成HTML干什么,当然WEB重启CACHE丢失并不在考虑之中,我有些迷惑,还请楼主赐教。
  回复  引用  查看    
#2楼2008-02-15 12:42 | HeroBeast      
我的网站就是生成静态页面的,不过时利用模板生成的。
这种生成方式不知道会不会有想分页时的问题。

  回复  引用    
#3楼2008-02-15 13:00 | fengfeng[未注册用户]
@Superstone
其实用cache也是挺好的,我原来做网站,对于一些主要的页面,也是用cache来缓存,cache的响应速度和htm页面差不对。
我写的这个生成静态页面的方法和项目无关,你只需要在web.config中进行相应的配置,就可是生成指定页的静态页面或重定向到其他页面。

  回复  引用    
#4楼2008-02-15 13:03 | fengfeng[未注册用户]
@HeroBeast
如果你想分页的话,就不要生成静态页了,这样做没有多大意义。

  回复  引用    
#5楼2008-02-15 15:46 | 情人猪[未注册用户]
不错 国内还是静态页面是王道
  回复  引用    
#6楼2008-02-15 20:10 | 83aaa[未注册用户]
非常不错的一个思路呀
  回复  引用    
#7楼2008-02-17 19:11 | cw[未注册用户]
写得很好....
  回复  引用    
#8楼2008-02-19 09:57 | tmxkhd666[未注册用户]
楼主你写的这个怎么用啊.
这个没有看明白啊.
是不是少点东西啊.
能不能再指点下.
谢谢.

  回复  引用  查看    
#9楼[楼主]2008-02-19 10:41 | 王庆      
@tmxkhd666
我建议你先看看UrlRewrite介绍.连接如下:
http://www.boy5d.com/article/html/2007-11/106.html" target="_new">http://www.boy5d.com/article/html/2007-11/106.html
看懂这个之后,再看我的这篇文章,结合我出的一个演示示例,应该就没什么问题了.

  回复  引用    
#10楼2008-02-19 15:08 | tmxkhd666[未注册用户]
谢谢你的指点.
我慢慢的琢磨吧.

但是这个链接好像已经被删除了.
不过,还是要谢谢你.
你很热心.

  回复  引用  查看    
#11楼[楼主]2008-02-19 15:56 | 王庆      
@tmxkhd666
http://msdn2.microsoft.com/zh-cn/library/ms972974.aspx" target="_new">http://msdn2.microsoft.com/zh-cn/library/ms972974.aspx
你看这个连接吧,我测试过了,没有失效.

  回复  引用    
#12楼2008-03-04 14:13 | tmxkhd666[未注册用户]
谢谢你啊.
学习ing.
有问题还会向你请教的.

  回复  引用    
#13楼2008-04-17 17:42 | cqs263[未注册用户]
不错,但既然是静态页面,用户访问的是.html为后缀的页面,怎么跑到HttpModule里去, 再说如果访问html跑到HttpModule上去,这与访问动态页面有什么区别,也就是说用户实际访问的还是动态页面,不明白,请指教
  回复  引用  查看    
#14楼[楼主]2008-04-17 20:31 | 王庆      
--引用--------------------------------------------------
cqs263: 不错,但既然是静态页面,用户访问的是.html为后缀的页面,怎么跑到HttpModule里去, 再说如果访问html跑到HttpModule上去,这与访问动态页面有什么区别,也就是说用户实际访问的还是动态页面,不明白,请指教
--------------------------------------------------------
第一 用户访问的不是静态页面,而是在访问动态页面的时候,重定向到与之对应的静态页面。
第二 不能直接访问静态页面,这牵涉到我们依据一定的条件动态生成静态页面。
第三 你看到的页面的后缀虽然是.aspx,但是经过url重定向后,我们访问的真正页面是静态页面。

  回复  引用    
#15楼2008-05-14 14:20 | 小灰[未注册用户]
不错不错,我以前用过这个方法。
  回复  引用    
#16楼2008-06-02 19:14 | cqs263[未注册用户]
再次回访,楼主是不是忽视了个东西,也就是生成文件的独占问题,如果有很多人同时写入这个文件,应该怎么处理,谢谢
  回复  引用    
#17楼2008-06-10 17:36 | ddf[未注册用户]
谢谢楼主,上面代码看不到,可否修改一下
  回复  引用    
#18楼2008-07-16 11:44 | cqs263[未注册用户]
用了你的生成方法,的确给我带来了很多方便,不过也存在一个问题,不知楼主是否也遇过,就是当某个页面已经生成,下次再来覆盖生成时,就会在文件内容底部出现一多除的代码,我网站的用户有6w到8w,不知是不是因为用户访问冲突而产生的,但我已经用了楼主的文件独占生成方法.出现代码如下:

<!--底部结束-->
</body>
</html>js" type="text/javascript"></script>
<!--底部结束-->
</body>
</html></div>
<div class="beian">京ICP备05020954号</div>
</div>
<script language="javascript" src="/js/stat.js" type="text/javascript"></script>
<!--底部结束-->
</body>
</html>

本来内容到<!--底部结束-->
</body>
</html> 就已经结束

但却多出了如果代码

js" type="text/javascript"></script>
<!--底部结束-->
</body>
</html></div>
<div class="beian">京ICP备05020954号</div>
</div>
<script language="javascript" src="/js/stat.js" type="text/javascript"></script>
<!--底部结束-->
</body>
</html>

  回复  引用  查看    
#19楼[楼主]2008-07-17 11:36 | 王庆      
@cqs263
我已经更新了源代码,新的代码改的地方很多,请重新下载吧,如果您遇到的问题还没有解决,那就加我的msn吧,wangqing490@hotmail.com

  回复  引用    
#20楼2008-07-17 21:57 | cqs263[未注册用户]
改用线程池的确是个好办法,但生成页面时改用WebRequest 来获取网页源码,效果可能没有原来的ResponseFilter好,因为用WebRequest+RewriterUtils.RewriteUrl是不是等于打开当前页面两次,再说WebRequest.Create(url) 会不会再次来到CreateHtml(object obj)
  回复  引用  查看    
#21楼[楼主]2008-07-18 09:18 | 王庆      
@cqs263
现在提供的源代码,其设计思路和原来有了很大的不同。
1,如果静态页面不存在,一个aspx页面会被访问两次,我们请求的,系统请求的(用于生成静态页面)。
2,如果静态页面存在,一个aspx页面会被访问一次,我们请求的会被重定向到静态页面,如果静态页面失效,系统请求aspx页面生成静态页面。
3,WebRequest.Create(url)不会再次来到CreateHtml(object obj),第一次请求的时候,我在请求的路径上加了一个表示。用以判断是系统请求的。

我在源代码中有注释,如果您还有什么不清楚的地方,请和我联系
wangqing490@hotmail.com

  回复  引用    
#22楼2008-07-18 11:10 | cqs263[未注册用户]
谢谢楼主热心回答
  回复  引用  查看    
#23楼2008-08-28 10:07 | 榕城小榕      
看了源程序,如果URL有带参数的话,如下URL:http://www.cnblogs.com/classid=1&typeid=2&id=3" target="_new">http://www.cnblogs.com/classid=1&typeid=2&id=3
像这样的URL,去生成静态页面,应该如何解决?

  回复  引用  查看    
#24楼2008-10-22 18:08 | huankfy      
最近在搞页面静态化,才看到这个博文,思路太好了,设计也很棒,我都没想到在url重写这块来做。
  回复  引用    
#25楼2009-02-19 09:11 | kingcai[未注册用户]
顶,学习中,不错的思路。楼主很好,谢了,
  回复  引用    
#26楼2009-03-15 22:33 | 很菜的菜鸟[未注册用户]
非常棒的文章 强烈关注,谢谢楼主的无私奉献
  回复  引用    
#27楼2009-05-17 20:34 | ulipnwtn[未注册用户]
vvpuxlxq http://wkelxpva.com hsmvlypl opvgsetc



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1069462




相关文章:

相关链接: