一概述
在Web应用中有些报表的生成可能需要数据库花很长时间才能计算出来有的网站提供天气信息它需要访问远程服务器进行SOAP调用才能得到温度信息所有这一切都属于复杂信息的例子在Web页面中加入过多的复杂信息可能导致Web服务器数据库服务器负荷过重jsp(SUN企业级应用的首选)(SUN企业级应用的首选)代码块缓沖为开发者带来了随意地增加各种复杂信息的自由
jsp(SUN企业级应用的首选)(SUN企业级应用的首选)能够在标记库内封装和运行复杂的Java代码它使得jsp(SUN企业级应用的首选)(SUN企业级应用的首选)页面文件更容易维护使得非专业开发人员使用jsp(SUN企业级应用的首选)(SUN企业级应用的首选)页面文件更加方便现在已经有许多标记库它们或者是商业产品或者是源代码开放产品但这些产品中的大多数都只是用标记库的形式实现原本可以用一个简单的Java Scriptlet实现的功能很少有产品以某种创造性的方式使用定制标记提供在出现jsp(SUN企业级应用的首选)(SUN企业级应用的首选)定制标记库之前几乎不可能实现的用法
OSCache标记库由OpenSymphony设计它是一种开创性的jsp(SUN企业级应用的首选)(SUN企业级应用的首选)定制标记应用提供了在现有jsp(SUN企业级应用的首选)(SUN企业级应用的首选)页面之内实现快速内存缓沖的功能虽然已经有一些供应商在提供各种形式的缓存产品但是它们都属于面向特定供应商的产品OSCache能够在任何jsp(SUN企业级应用的首选)(SUN企业级应用的首选) 兼容的服务器上运行它不仅能够为所有用户缓沖现有jsp(SUN企业级应用的首选)(SUN企业级应用的首选)代码块而且能够以用户为单位进行缓沖OSCache还包含一些提高可伸缩性的高级特性比如缓沖到磁盘可编程的缓沖刷新异常控制等等另外正如OpenSymphony的其他产品OSCache的代码也在一个开放源代码许可协议之下免费发行
本文以一个假想的拍卖网站设计过程为例介绍OSCache的工作过程这个假想的Web网站将包含一个报告最近拍卖活动的管理页面一个功能完整带有各种宣传信息的主页一个特殊的导航条它包含了用户所有尚未成交的拍卖活动信息
二管理页面
拍卖网站包含一个管理报表数据库服务器需要数秒时间才能创建这样一个报表报表生成时间长这一点很重要因为我们可能让多个管理员监视系统运行情况同时又想避免管理员每次访问时都重新生成这个报表为了实现这一点我们将把整个页面封装到一个应用级的缓沖标记之内这个缓沖标记每隔小时刷新其他供应商提供的一些产品也具有类似的功能只是OSCache比它们做得更好
为简单计我们将不过多地关注格式问题在编写管理页面时我们首先把标记库声明加入到页面
<%@ taglib uri=
cachetags
prefix=
cache
%>
接下来我们要用cache标记来包围整个页面cache标记的默认缓沖时间是小时
<cache:cache>
复杂的管理报表
</cache:cache>
现在管理页面已经被缓沖如果管理员在页面生成后的一个小时之内再次访问同一页面他看到的将是以前缓存的页面不需要由数据库服务器再次生成这个报表
三主页
拍卖网站的主页显示网站活动情况宣传那些即将结束的拍卖活动我们希望显示出正在进行的拍卖活动数量当前登录用户数量在短期内就要结束的拍卖活动的清单以及当前时间这些信息有着不同的时间精确度要求网站上的拍卖活动通常持续数天因此我们可以把缓沖有效拍卖活动数量的时间定为个小时用户数量的变化显然要频繁一些但这里我们将把这个数值每次缓沖分钟最后我们希望页面中显示的当前时间总是精确的页面访问时间
在主页中声明标记库之后我们首先以不带缓沖的方式直接输出当前日期
现在是
<%=new java
util
Date()%>
接下来我们要显示一个清单列出那些将在短期内结束的拍卖活动
<cache:cache> <ul> <% // 构造一个包含最近拍卖活动的Iterator Iterator auctions = while (auctionshasMore()) { Auction auction = (Auction)auctionsnext(); %><li><%=auction%></li%< } %> </ul> </cache:cache>