首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统-> FreeBSD教程
用缓冲技术提高jsp应用的性能和稳定性(转载) _jsp技巧
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

一、概述
在Web应用中,有些报表的生成可能需要数据库花很长时间才能计算出来;有的网站提供天气信息,它需要访问远程服务器进行SOAP调用才能得到温度信息。所有这一切都属于复杂信息的例子。在Web页面中加入过多的复杂信息可能导致Web服务器、数据库服务器负荷过重。JSP代码块缓冲为开发者带来了随意地增加各种复杂信息的自由。

JSP能够在标记库内封装和运行复杂的Java代码,它使得JSP页面文件更容易维护,使得非专业开发人员使用JSP页面文件更加方便。现在已经有许多标记库,它们或者是商业产品,或者是源代码开放产品。但这些产品中的大多数都只是用标记库的形式实现原本可以用一个简单的Java Scriptlet实现的功能,很少有产品以某种创造性的方式使用定制标记,提供在出现JSP定制标记库之前几乎不可能实现的用法。

OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。虽然已经有一些供应商在提供各种形式的缓存产品,但是,它们都属于面向特定供应商的产品。OSCache能够在任何JSP 1.1兼容的服务器上运行,它不仅能够为所有用户缓冲现有JSP代码块,而且能够以用户为单位进行缓冲。OSCache还包含一些提高可伸缩性的高级特性,比如:缓冲到磁盘,可编程的缓冲刷新,异常控制,等等。另外,正如OpenSymphony的其他产品,OSCache的代码也在一个开放源代码许可协议之下免费发行。

本文以一个假想的拍卖网站设计过程为例,介绍OSCache的工作过程。这个假想的Web网站将包含:

 1 :一个报告最近拍卖活动的管理页面;
 2 :一个功能完整、带有各种宣传信息的主页;
 3 :一个特殊的导航条,包含了用户所有尚未成交的拍卖活动信息。
二、管理页面

拍卖网站包含一个管理报表,数据库服务器需要数秒时间才能创建这样一个报表。报表生成时间长这一点很重要,因为我们可能让多个管理员监视系统运行情况,同时又想避免管理员每次访问时都重新生成这个报表。为了实现这一点,我们将把整个页面封装到一个应用级的缓冲标记之内,这个缓冲标记每隔1小时刷新。其他供应商提供的一些产品也具有类似的功能,只是OSCache比它们做得更好。

为简单计,我们将不过多地关注格式问题。在编写管理页面时,我们首先把标记库声明加入到页面:

<%@ taglib uri="cachetags" prefix="cache" %>

接下来我们要用cache标记来包围整个页面。cache标记的默认缓冲时间是1小时。

<cache:cache> .... 复杂的管理报表 .... </cache:cache>

现在管理页面已经被缓冲。如果管理员在页面生成后的一个小时之内再次访问同一页面,他看到的将是以前缓存的页面,不需要由数据库服务器再次生成这个报表。

三、主页
拍卖网站的主页显示网站活动情况,宣传那些即将结束的拍卖活动。我们希望显示出正在进行的拍卖活动数量,当前登录用户数量,在短期内就要结束的拍卖活动的清单,以及当前时间。这些信息有着不同的时间精确度要求。网站上的拍卖活动通常持续数天,因此我们可以把缓冲有效拍卖活动数量的时间定为6个小时。用户数量的变化显然要频繁一些,但这里我们将把这个数值每次缓冲15分钟。最后,我们希望页面中显示的当前时间总是精确的页面访问时间。

在主页中声明标记库之后,我们首先以不带缓冲的方式直接输出当前日期:

现在是:<%=new java.util.Date()%>

接下来,我们要显示一个清单,列出那些将在短期内结束的拍卖活动:

<cache:cache> <ul> <% // 构造一个包含最近拍卖活动的Iterator Iterator auctions = .... while (auctions.hasMore()) { Auction auction = (Auction)auctions.next(); %><li><%=auction%></li%< } %> </ul> </cache:cache>

最后,我们希望显示出正在进行的拍卖活动的数量,这个数字需要缓冲6小时。由于cache标记需要的是缓冲数据的秒数,我们把6小时转换成21600秒:

<cache:cache time="21600"> <% //查询数据库得到拍卖活动总数 int auctionCount = .... %> 本网站正在进行的拍卖活动有<%=auctionCount%>个! </cache>

可以看到,我们只用少量的代码就构造出了一个带有复杂缓冲系统的主页。这个缓冲系统对页面各个部分分别进行缓冲,而且各个部分的缓冲时间完全符合它们各自的信息变化频繁程度。由于有了缓冲,现在我们可以在主页中放入更多的内容;而在以前没有缓冲的情况下,主页中放入过多的内容会导致页面访问速度变慢,甚至可能给数据库服务器带来过重的负载。

四、导航条
假设在规划网站的时候,我们决定在左边导航条的下方显示购物车内容。我们将显示出用户所拍卖的每一种商品的出价次数和当前报价,以及所有那些当前用户出价最高的商品的清单。

我们利用会话级的缓冲能力在导航条中构造上述功能。把下面的代码放入模板或者包含文件,以便网站中的其他页面引用这个导航条:

<cache:cache key="navbar" scope="session" time="300"> <% //提取并显示当前的出价信息 %> </cache:cache>

在这里我们引入了两个重要的属性,即key和scope。在本文前面的代码中,由于cache标记能够自动为代码块创建唯一的key,所以我们不需要手工设置这个key属性。但在这里,我们想要从网站的其余部分引用这个被缓冲的代码块,因此我们显式定义了该cache标记的key属性。第二,scope属性用来告诉cache标记当前代码块必须以用户为单位缓冲,而不是为所有用户缓冲一次。

在使用会话级缓冲时应该非常小心,应该清楚:虽然我们可以让复杂的导航条减少5倍或10倍的服务器负载,但它将极大地增加每个会话所需要的内存空间 。在CPU能力方面增加可能的并发用户数量无疑很理想,但是,一旦在内存支持能力方面让并发用户数量降低到了CPU的限制之下,这个方案就不再理想。

正如本文前面所提到的,我们希望从网站的其余部分引用这个缓冲的代码块。这是因为,当一个用户增加了一个供拍卖的商品、或者出价竞购其他用户拍卖的商品时,我们希望刷新缓冲,使得导航条下一次被读取时具有最新的内容。虽然这些数据可能因为其他用户的活动而改变,但如果用户在网站上执行某个动作之后看到自己的清单仍未改变,他可能会感到非常困惑。

OSCache库提供的flush标记能够刷新缓冲内容。我们可以把下面的代码加入到处理用户动作且可能影响这一区域的页面之中:

<cache:flush key="navbar" scope="session" />

当用户下次访问它时,navbar缓冲块将被刷新。

至此为止,我们这个示例网站的构造工作已经完成且可以开始运行。下面我们来看看OSCache的异常处理能力。即使缓冲的内容已经作废,比如在缓冲块内出现了Java异常,OSCache标记库仍旧允许我们用编程的方法显示这些内容。有了这种异常控制功能,我们可以拆除数据库服务器和Web服务器之间的连接,而网站仍能够继续运行。JSP 1.2规范引入了TryCatchFinally接口,这个接口允许标记本身检测和处理Java异常。因此,标记可以结合这种异常处理代码,使得JSP页面更简单、更富有条理。

OpenSymphony正在计划实现其他的缓冲机制以及一个可管理性更好的主系统,它将使我们能够对缓冲使用的RAM和磁盘空间进行管理。一旦有了这些功能,我们就能够进一步提高网站的响应速度和可靠性。

使用范例:

oscache.properties 文件配置向导

cache.memory
值为true 或 false ,默认为在内存中作缓存,
如设置为false,那cache只能缓存到数据库或硬盘中,那cache还有什么意义:)

cache.capacity
缓存元素个数

cache.persistence.class
持久化缓存类,如此类打开,则必须设置cache.path信息

cache.cluster 相关
为集群设置信息。

cache.cluster.multicast.ip为广播IP地址
cache.cluster.properties为集群属性


3.OSCache的基本用法

cache1.jsp 内容如下

<%@ page import="java.util.*" %>
<%@ taglib uri="oscache" prefix="cache" %>

<html>
<body>

没有缓存的日期: <%= new Date() %><p>
<!--自动刷新-->
<cache:cache time="30">
每30秒刷新缓存一次的日期: <%= new Date() %>
</cache:cache>
<!--手动刷新-->
<cache:cache key="testcache">
手动刷新缓存的日期: <%= new Date() %> <p>
</cache:cache>
<a href="/cache2.jsp">手动刷新</a>

</body>
</html>

cache2.jsp 执行手动刷新页面如下
<%@ taglib uri="oscache" prefix="cache" %>

<html>
<body>

缓存已刷新...<p>

<cache:flush key="testcache" scope="application"/>

<a href="/cache1.jsp">返回</a>

</body>
</html>


你也可以通过下面语句定义Cache的有效范围,如不定义scope,scope默认为Applcation
<cache:cache time="30" scope="session">
...
</cache:cache>

4. 缓存过滤器 CacheFilter

你可以在web.xml中定义缓存过滤器,定义特定资源的缓存。

 1  < filter >
 2      < filter - name > CacheFilter </ filter - name >
 3      < filter - class > com.opensymphony.oscache.web.filter.CacheFilter </ filter - class >
 4      < init - param >
 5          < param - name > time </ param - name >
 6          < param - value > 60 </ param - value >
 7      </ init - param >
 8      < init - param >
 9          < param - name > scope </ param - name >
10          < param - value > session </ param - value >
11      </ init - param >
12  </ filter >
13 
14 
15  < filter - mapping >
16      < filter - name > CacheFilter </ filter - name >
17      < url - pattern >* .jsp </ url - pattern >
18  </ filter - mapping >
上面定义将缓存所有.jsp页面,缓存刷新时间为60秒,缓存作用域为Session

注意,CacheFilter只捕获Http头为200的页面请求,即只对无错误请求作缓存,
而不对其他请求(如500,404,400)作缓存处理

【结束语】OSCache能够帮助我们构造出更丰富多彩、具有更高性能的网站。有了OSCache标记库的帮助,现在我们能够用它解决一些影响网站响应能力的问题,比如访问量高峰期、数据库服务器负荷过重等。

个人提示:如果你使用Struts或者其它mvc架构很难享受到oscache tag带来的性能提高,因为每一次请求还是要提交到action--dao-or othere thing去处理,因此,要使用缓存,就需要其它手段,如在spring的拦截器做方法级的缓存.....,如果你所有的的业务处理代码是写在jsp页面中,就可以使用cache tag来缓存前面产生的页面数据,避免做相同的业务操作.


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Tomcat 5.5 配置 MySQL 数据库连接池-JSP教程,数据库相关
·Remoting编程知识二-.NET教程,.NET Framework
·java 实现web 登陆-JSP教程,Java技巧及代码
·Visual C#中的多线程编程-.NET教程,C#语言
·如何在freebsd4.9平台上安装darwin streaming server 5.0
·从网页上读取源代码,并写入文件-.NET教程,面向对象编程
·小型局域网布线攻略
·在Jsp程序读取或向DB写入数据乱码解决办法-JSP教程,数据库相关
·C#下的webservcie 实现代码和 在vc和python下的调用实现-.NET教程,C#语言
·cable modem技术综述
最新文章
·网站赚钱的四个技巧_网赚技巧
·做一个职业的酋长-访echo_站长访谈
·绿野户外网负责人海光:带着困惑上路_站长访谈
·站长自习室访谈系列:晴空--漫漫八年网络路_站长访谈
·搜房网无线主管王峰:互联网生存四原则_站长访谈
·discuz!6.0新版本尝鲜—“电子商务”功能强大而完善,会员在论坛开店轻而易举_discuz!论坛
·互联网时代的个人站长更需要独立思考_站长心得
·如何让网民爱上你的网站?(2)_站长心得
·运营论坛赢在创意,氛围决定成功_站长心得
·五年以后个人网站像传呼机一样成为历史?_站长心得
相关主题
  • 用缓冲技术提高JSP应用的性能和稳定性-JSP教程,Jsp/Servlet
  • 用缓冲技术提高jsp应用的性能和稳定性
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭