`
luanmad_java
  • 浏览: 16972 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

用缓冲技术提高JSP应用的性能和稳定性

阅读更多

用缓冲技术提高JSP应用的性能和稳定性
一、概述
在Web应用中,有些报表的生成可能需要数据库花很长时间才能计算出来;有的网站提供天气信息,它需要访问远程服务器进行SOAP调用才能得到温度信息。所有这一切都属于复杂信息的例子。在Web页面中加入过多的复杂信息可能导致Web服务器、数据库服务器负荷过重。JSP代码块缓冲为开发者带来了随意地增加各种复杂信息的自由。
JSP能够在标记库内封装和运行复杂的Java代码,它使得JSP页面文件更容易维护,使得非专业开发人员使用JSP页面文件更加方便。现在已经有许多标记库,它们或者是商业产品,或者是源代码开放产品。但这些产品中的大多数都只是用标记库的形式实现原本可以用一个简单的 JavaScriptlet实现的功能,很少有产品以某种创造性的方式使用定制标记,提供在出现JSP定制标记库之前几乎不可能实现的用法。
OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。虽然已经有一些供应商在提供各种形式的缓存产品,但是,它们都属于面向特定供应商的产品。OSCache能够在任何JSP1.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服务器之间的连接,而网站仍能够继续运行。JSP1.2规范引入了TryCatchFinally接口,这个接口允许标记本身检测和处理Java异常。因此,标记可以结合这种异常处理代码,使得JSP页面更简单、更富有条理。
OpenSymphony正在计划实现其他的缓冲机制以及一个可管理性更好的主系统,它将使我们能够对缓冲使用的RAM和磁盘空间进行管理。一旦有了这些功能,我们就能够进一步提高网站的响应速度和可靠性。
【结束语】 OSCache能够帮助我们构造出更丰富多彩、具有更高性能的网站。有了OSCache标记库的帮助,现在我们能够用它解决一些影响网站响应能力的问题,比如访问量高峰期、数据库服务器负荷过重等。
分享到:
评论

相关推荐

    提升JSP应用程序的七大绝招

    【提升JSP应用程序的七大绝招...通过以上七个绝招,可以显著提升JSP应用程序的性能,增强系统的稳定性和响应速度,同时降低服务器负载,应对高并发访问。在实际应用中,应根据具体项目需求和环境进行适当的调整和优化。

    jsp开发中遇到的问题及解决方案.rar

    12. **性能优化**:合理使用缓冲区、避免不必要的数据库查询、最小化HTTP请求和优化JSP代码等方法可以提升Web应用的性能。 这个压缩包中的文档详细介绍了这些问题及其解决方案,对于JSP开发者来说,深入理解和实践...

    基于 jsp 邮件管理系统

    9. **测试与部署**:系统开发完成后,需进行全面的功能测试、性能测试和安全测试,确保其稳定性和可靠性。部署时,可能需要配置Web服务器(如Tomcat)、数据库服务器,以及邮件服务器的相关参数。 综上所述,基于...

    JSP 高级编程希望版(PDF)

    11. **性能优化**:了解如何合理使用缓冲区、减少不必要的数据库查询、优化JSP页面的渲染等,能够提升JSP应用的性能。 12. **安全性**:保护JSP应用免受SQL注入、跨站脚本攻击(XSS)和其他安全威胁是每个开发者...

    www.cn-ki.net_基于J2EE架构的分布式企业级Web应用研究1

    在基于J2EE架构的企业级Web应用中,我们可以使用Java技术建立Web应用,例如JSP+JavaBeans和JSP+Servlet+JavaBeans等模式。这些模式可以将表现页面和商务逻辑分离开来,以JSP为中心,在开发小规模的Web应用当中的优势...

    jsp文件下载

    可以采用缓冲区分块读写的方式,提高效率和稳定性。 5. 响应结束:记得在适当的位置调用`response.flushBuffer()`或`response.sendRedirect()`,结束响应。 四、安全与优化 1. 防止路径遍历攻击:确保提供的文件...

    JSP中常用的技巧.ppt

    在JSP(Java Server Pages)开发中,有多种常见的技巧用于提升应用的性能和用户体验。以下是一些核心知识点的详细说明: 1. **在不同页面或用户之间共享数据**: - **Session共享**:同一用户在不同页面间共享数据...

    Java性能优化技巧集锦

    final类无法被继承,有助于防止意外的修改,提高代码稳定性和性能。例如,`String`类就是final的,确保其不可变性,利于优化。 1.6 尽量使用局部变量 局部变量的生命周期短,内存分配在栈上,访问速度快。尽量避免...

    SPECjEnterprise 2010 Performance Update

    - **并发处理**:测试系统在高并发下的性能和稳定性。 SPECjEnterprise 2010的设计旨在全面评估Java EE应用程序服务器的整体性能和可靠性。通过对各种典型业务场景的模拟,可以准确地衡量和比较不同平台之间的性能...

    JSP源码——[上传下载]铁人下载系统 Liuxing 1.0_liuxing1.0.zip

    8. **性能优化**:考虑到大文件传输的效率,系统可能会使用多线程、缓冲区技术来提高性能,同时可能还有缓存策略,减少不必要的数据库查询。 通过对“铁人下载系统 Liuxing 1.0”源码的深入研究,我们可以学习到...

    Tomcat与Java Web开发技术详解(附带阅读器)

    9. **性能优化**:如何调整Tomcat配置以提高应用性能,如线程池设置、连接超时和缓冲区大小等。 10. **故障排查与日志**:理解Tomcat的日志系统,以及如何根据错误日志定位问题。 11. **Tomcat集群与负载均衡**:...

    web服务器tomcat7.0

    描述中提到的"tomcat 使用jsp开发web的web服务器,其使用性很好",这表明Tomcat是开发基于JSP技术的Web应用程序的理想选择,因为它是轻量级的,安装和配置相对简单,且在性能和稳定性上表现出色。Tomcat的易用性使得...

    resin-pro-3.0.27

    10. **持续更新与维护**:Caucho Technology会定期发布更新和补丁,修复已知问题并引入新功能,确保Resin Pro的稳定性和兼容性。 总的来说,Resin Pro 3.0.27是一款适合中小型企业或开发团队使用的Java应用服务器,...

    BEA WebLogic平台下J2EE调优攻略.doc

    在BEA WebLogic平台上进行J2EE调优是提高应用程序性能和稳定性的重要步骤。这篇文章将带你深入了解如何在各个层面上优化你的系统。 首先,我们从应用程序本身的调优开始。通用代码调优涉及到优化代码逻辑,减少不必...

    基于JAVA的论坛系统_毕业论文.pdf

    本文主要介绍了基于Java...通过以上知识点的详细解释,我们可以了解到该论坛系统的设计和实现技术涵盖了从前端页面设计到后端服务器架构的多个方面,并且遵循了业界标准和最佳实践,从而确保系统的稳定性和可扩展性。

Global site tag (gtag.js) - Google Analytics