您当时的方位:主页 > 言语编程 > JSP

缓冲技能进步JSP程序的功用和稳定性

2014-09-14  www.codeforacause.net
一、概述

  在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小时改写。其他供货商供给的一些产品也具有相似的功用,仅仅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可以协助咱们结构出更五光十色、具有更高功用的网站。有了OSCache符号库的协助,现在咱们可以用它处理一些影响网站呼应才能的问题,比方拜访量高峰期、数据库服务器负荷过重等。