设计目的:
当网站的访问量日益增多,数据库的记录日益庞大时,这时数据库的压力将会变得非常大,如果每一次的用户请求都要从数据库里取数据的话,不但不能及时响应用户的请求,还会使数据库处于一个不稳定的状态,影响网站性能。当数据库已经成为性能瓶颈时,这时候,最有效且直接的方式就是通过缓存或生成静态文件来减少数据库的读取次数,从而降低数据库的压力,提升请求的响应速度。在大型网站里,有些页面由于访问特别频繁(如:首页)或很少有变动(如:新闻详细页),特别适合生成静态页面,这里主要介绍生成静态文件的解决方案:
功能特色:
1、完全自动化,需要生成静态文件的页面在web.xml里通过正则表达式来配置即可
2、可以对每个页面设置其生成的静态文件的过期时间,以区分不同的板块和页面的重要性。(注:一般来说,首页的过期时间会短一些,而新闻详细页会长一点)
3、 生成的静态文件根据其URL存在相应的目录下,方便页面自动跳转和管理维护。
4、直接由原始的请求得到的响应流生成,而不是向本机发送一个http请求,再将响应写入一个文件,提高了速度和性能。
实现思路:
1、请求过来的URL,首先通过Filter来过滤:
1)判断它是否需要生成静态,规则通过web.xml的<filter>初始化参数获得
2)判断文件是否存在和是否过期,如果存在且未过期,则直接forward到该静态文件输出;如果不存在或已过期,则将请求转发给Servlet,由它来生成静态文件
2、如果需要生成静态,则请求转到Servlet:
1)Servlet接到请求后,首先根据请求的URL路径来生成对应的目录,如:url为:http://www.ryanote.com/archives/102,那么生成的目录为<html_dir>/archives,其中<html_dir>为存放静态文件的地址,生成的静态文件名为88.html
2)通过HttpServletResponseWrapper来包装Response,并将请求返回的内容写入到静态文件里。
3)将生成的静态文件输出
配置文件代码:
web.xml:
convertToHtmlFilter
com.ryanote.filters.ConvertToHtmlFilter
url
/root/index.htm|trade/tradeCenter.htm
expiredSeconds
1000|2000
convertToHtmlFilter
*.htm
REQUEST
FORWARD
.........
convertToHtmlServlet
com.ryanote.servlet.ConvertToHtmlServlet
convertToHtmlServlet
/ConvertToHtml
原创文章,转载请注明: 转载自Ryan's note
本文链接地址: 结合Filter和Servlet实现真正的静态化
0 Comments.