门户站点静态发布的设计与实现
之前写过一片文章讲述了门户首页静态发布解决方案(访问网址:http://infinite.iteye.com/blog/235109),本篇文章继续深入谈谈如何发布门户整站。门户站点的页面可大致分为以下几类:
1、 门户首页
2、 二级页面(或称栏目页)
3、 三级页面(或称文章页)
4、 全文检索结果展示页面
5、 控制台管理页面
其中需要前面三种类型的页面是需要发布成静态的,另外发布还分两种情况:
1、整站发布:从首页开始发布整个站点。
2、单页发布:根据指定的发布页,发布其及其页面上的所有链接,但页面上链接发布出来的页面上的链接不再继续发布。单页发布主要出于增量发布的需要,比如某栏目下新增加了文章,就可单独对该栏目对应的页面进行单独发布,无需每次都整站发布。
为提高性能,避免对一些不变的页面进行不必要的重新发布(比如文章页),特定以下规则:
1、如果已存在的发布页面列表不包含当前要发布的页面,则发布该页面
2、如果包含,且非文章页,则发布该页面
3、如果包含,且是文章页,且非第一个发布页面,则不再发布该页面
4、如果包含,且是文章页,且是第一个发布页面(单个文章页发布时),则发布该页面
另外对是否发布页面上链接地址,也定以下规则:
1、如果是整站发布,当前发布页面非文章页,则发布其上所有链接
2、如果是整站发布,当前发布页面为文章页,则不发布其上所有链接
3、如果是单页发布,且当前发布页是指定页本身,则发布其上所有链接
4、如果是单页发布,当前发布页非指定页本身,则不发布其上所有链接
具体的发布实现过程参照网络爬虫的原理,具体如下:
1、 从首页开始,使用HttpURLConnection模拟浏览器发起一个请求,通过读取请求响应的内容来抓取页面内容,保存到本地的静态html页面里;
2、解析该新保存的页面内容(使用一个叫HtmlParser的开源包),获取页面里的所有链接,过滤出需要发布成静态页面的url地址。
3、 对这些url地址逐个重复进行1、2两步的操作。
4、将静态页面里的动态url地址替换成新发布出来的静态html页面地址。
以上过程其实是个深度发布的过程,从首页到栏目页,再一直到文章页,从而将整个站点的所有页面都抓取下来。