`
- 浏览:
446895 次
- 性别:
- 来自:
上海
-
在Web应用中,内容缓存是最普通的优化技术之一,并且能够很容易地实现。例如,可以使用一个自定义地JSP标签——我们将之命名为<jc: cache>——由<jc:cache>和</jc:cache>将每一个需要被缓存的页面片段封装起来。任何自定义标签 可以控制它所包含部分 (也即预先封装的页面片段)在何时执行,并且动态输出结果可以被捕获。<jc:cache>标签使得JSP容器(例如Tomcat)只生成内 容一次,作为应用程序范围内的JSP变量,来存储每一个缓存片段。每次JSP页面被执行时,自定义标签将缓存页面片段载入而无需再次执行JSP代码来生成 输出结果。作为Jakarta工程的一个部分,标签库的开发使用了这项技术。当被缓存内容无需被每一个用户或者请求所定制的时候,它工作的十分良好。
这篇文章对上面描述的技术做了改进,通过使用JSP 2.0表达式语言(EL),允许JSP页面为每一个请求和用户定制缓存内容。缓存页面片段可以包含未被JSP容器赋值的JSP表达式,在每一次页面被执行 时,由自定义标签来确定这些表达式的值。因此,动态内容的建立被最优化,但是缓存片段可以含有部分由每一个请求使用本机JSP表达式语言产生的内容。通过 JSP 2.0 EL API的帮助,Java开发者可以用表达式语言来使之成为可能。
内容缓存VS数据缓存
内容缓存不是唯一的选择。例如, 从数据库中提取的数据同样可以被缓存。事实上,由于存储的信息中不包含HTML markup,以及要求较少的内存,数据缓存可能更加高效率。然而在很多情况下,内存缓存更容易实现。假设在某个案例总,一个应用由大量事务对象,占用重 要的CPU资源,产生复杂的数据,并且用JSP页面来呈现这些数据。工作一切良好,直到某天突然地服务器的负载增加,需要一个紧急解决方案。这时在事务对 象和呈现表达层之间建立一个缓存层,时一个非常不错和有效的方案。但是必须非常快速和流畅地修改缓存动态内容的JSP页面。相对于简单的JSP页面编辑, 应用程序的业务逻辑变化通常要求更多的工作量和测试;另外,如果一个页面从多个复合源聚合信息时,Web层仅有少量的改变。问题在于,当缓存信息变得失去 时效时,缓存空间需要被释放,而事务对象应该知道何时发生这种情况。然而,选择实现内容缓存还是数据缓存,或者其他的优化技术,有很多不得不考虑的因素, 有时是所开发的程序所特殊要求的。
数据缓存和内容缓存没有必要互相排斥,它们可以一起使用。例如,在数据库驱动的应用中;从数据库中提取出来的数据,和呈现该数据的HTML分别被缓存起 来。这与使用JSP实时生成的模板有些相似。这篇文章中讨论的基于EL API技术说明如何使用JSP EL来将数据载入到呈现模板中。
使用JSP变量缓存动态内容
每当实现一个缓存机制是,都需要一个存储缓存对象的方法,在这篇文章中涉及的是String类型的对象。 一种选择是使用一个对象——缓存框架结构,或者使用Java maps来实现自定义的缓存方案。JSP已经拥有了称为“scoped attributes”或“JSP variables”来提供ID——object映射,这正是缓存机制所需要的。对于使用page或者request scope,这是没有意义的,而在应用范围内,这是一个很好的存储缓存内容的位置, 因为它被所有的用户和页面共享。当每一个用户需要单独缓存时,Session scope也可以被使用,但这不是很有效率。JSTL标签库可以被是与那个来缓存内容,通过使用JSP变量正如下例所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><c:if test="${empty cachedFragment}">
<c:set var="cachedFragment" scope="application">
...
</c:set></c:if>
缓存页面片段用下列语句输出结果:
${applicationScope.cachedFragment}
当缓存片段需要被每一个请求所定制的时候,到底发生了什么?例如,如果希望包含一个计数器,需要缓存两个片段:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><c:if test="${sessionScope.counter == null}"> <c:set var="counter" scope="session" value="0"/></c:if><c:set var="counter" value="${counter+1}" scope="session"/><c:if test="${empty cachedFragment1}">
<c:set var="cachedFragment1" scope="application">
...
</c:set></c:if><c:if test="${empty cachedFragment2}">
<c:set var="cachedFragment2" scope="application">
...
</c:set></c:if>
可以使用下面语句输出缓存内容:
${cachedFragment1} ${counter} ${cachedFragment2}
通过专门的标签库的帮助,需要定制的页面片段的缓存变得异常容易了。上面已经提及,缓存内容可以被开始标签(<jc:cache>)和结尾标 签(</jc:cache>)封装起来。而每一个定制可以使用另一个标签(<jc:dynamic expr="..."/>)输出一个JSP表达式(${...})来表现。动态内容用JSP表达式缓存并在每一次缓存内容被输出时赋值。在下面的部 分可以看到这是如何实现的。Counter.jsp缓存了一个包含计数器的页面片段,当每一次用户刷新这个页面的时候计数器会自动+1。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="jc" uri="http://devsphere.com/articles/jspcache" %><c:if test="${sessionScope.counter == null}">
<c:set var="counter" scope="session" value="0"/></c:if><c:set var="counter" value="${counter+1}" scope="session"/><jc:cache id="cachedFragmentWithCounter">
... <jc:dynamic expr="sessionScope.counter"/>
...</jc:cache>
JSP 变量易于使用,对于简单的Web apps,这是一个不错的内容缓存方案。然而,如果应用程序产生大量的动态内容,没有对缓存大小的控制无疑是一个问题。一种专用的缓存框架结构能够提供一 个更加有力的方案,允许对缓存的监视,限制缓存大小,控制缓存策略,等等……
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### JSP 2.0 技术手册知识点详解 #### 一、JSP 2.0 技术概览 **JSP (JavaServer Pages)** 是一种基于 **Java Servlet** 的技术,用于创建动态网页。它允许开发者在HTML文档中嵌入Java代码,从而实现动态内容的生成...
### JSP 2.0 技术手册知识点详解 #### 一、JSP 2.0 技术概述 **JSP(JavaServer Pages)** 是一种基于 **Java Servlet** 的动态网页技术标准,用于创建动态网站。它通过将 HTML 和 Java 代码混合在一个页面上,...
《jsp应用开发详解》这本书是Java服务器页面(JSP)技术的权威指南,它深入剖析了JSP的各个方面,帮助开发者全面掌握这一Web应用程序开发的重要技术。以下是对书中的主要知识点进行的详细解读: 1. **JSP基础**:...
由于《JSP应用开发详解第三版》源代码缺失了两个章节,可能涉及的这部分内容可能包括特定的JSP高级主题或特定的项目示例。不过,通过已有的源代码,读者仍然可以学习到大量的JSP开发知识,并结合其他资源来弥补缺失...
8. JSP与Servlet的关系:JSP本质是Servlet的另一种表现形式,JSP的动态内容生成过程等同于Servlet的service()方法执行。 9. JSP的错误处理和异常处理:通过`error-page`配置和`try-catch-finally`结构,可以捕获和...
**JSP网站内容管理系统详解** JavaServer Pages(JSP)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现服务器端的动态内容生成。JSP网站内容管理系统是基于JSP技术构建的,主要用于管理...
**JSP特效详解** JSP(JavaServer Pages)是一种基于Java技术的动态网页开发标准,由Sun Microsystems在1999年推出。它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,以实现服务器端的动态内容生成。本资料...
**JSP(Java Server Pages)**是Java技术在Web开发中的一个重要组成部分,它是一种动态网页技术,用于创建交互式和响应式的Web应用程序。在《jsp应用开发详解》这本书中,作者深入浅出地介绍了JSP的各个方面,帮助...
- 引入依赖:首先需要在项目的类路径下添加pager-taglib-2.0的相关jar文件,并在JSP页面中通过`<%@ taglib prefix="pager" uri="..." %>`声明Taglib。 - 配置Tag属性:然后在JSP页面中,使用`<pager:page>`标签来...
JSP是Java平台上的动态网页开发技术,它允许开发者将静态HTML与动态Java代码混合编写,使得网页内容能够根据服务器端的数据动态生成。JSP通过JSP标签、脚本元素和表达式来处理业务逻辑,提供了与Servlet类似的功能...
10. **安全和性能优化**:理解如何处理JSP的安全问题,如防止SQL注入、XSS攻击等,以及如何进行性能优化,如减少不必要的服务器请求、缓存策略等,都是JSP开发者必须掌握的技能。 通过《JSP应用开发详解》这本书的...
**JSP管理模板详解** JSP(JavaServer Pages)是一种基于Java的技术,用于创建动态网页。它将HTML、CSS、JavaScript等前端代码与Java代码相结合,使得开发者可以在服务器端处理数据,然后返回到客户端进行展示。...
【JSP源码详解——构建SaaS OA协同办公软件】 JSP(JavaServer Pages)是一种由Sun Microsystems公司推出的技术,用于动态生成Web页面。在【信息办公】凯撒java版SaaS OA协同办公软件 v2.0_saas-oa.zip这个压缩包中...
最后,"jsp应用开发详解"可能是对JSP技术的深度剖析,可能包含JSP 2.0及以上版本的新特性,如分离的视图和控制层、页面片段的缓存机制、异步处理等。通过这部分学习,开发者可以跟上JSP技术的发展步伐,了解并应用...
**JSP(Java Server Pages)技术详解** JSP(Java Server Pages)是Java平台上的一个动态网页技术,它允许开发者将HTML、XML或其他标记语言与Java代码结合起来,以创建交互式的网页应用程序。JSP的核心思想是将静态...
**JSP新闻发布系统详解** JavaServer Pages(JSP)是一种动态网页开发技术,由Sun Microsystems(现已被Oracle公司收购)推出,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,实现服务器端的动态网页生成...
**基于JSP的BBS论坛详解** 在信息技术领域,BBS(Bulletin Board System,电子公告板系统)是一种网络交流平台,允许用户发布信息、进行讨论和互动。而本项目是利用JavaServer Pages(JSP)技术实现的一个BBS论坛,...
【内容详解】 JSP(Java Server Pages)和Servlet是Java Web开发中的核心技术,广泛应用于构建动态Web应用程序。本教程旨在为开发者提供深入理解JSP和Servlet的全面指导,帮助读者从基础到高级,全面掌握这两项技术...
目前JSP2.0规范仅支持java,未来可能会扩展支持更多语言如C或C++。 - **extends**:用于指定JSP页面转换后的Servlet类从哪一个类继承,属性的值是完整的限定类名。通常不需要使用这个属性,因为JSP容器会提供转换后...