jsp缓存:深入讲解JSP 2.0下的动态内容缓存Cache技术

        内容缓存Cache是Web应用中最普通优化技术的例如可以使用个自定义地JSP标签——我们将的命名为<jc:cache>——由<jc:cache>和</jc:cache>将每个需要被缓存Cache页面片段封装起来任何自定义标签可以控制它所包含部分 (也即预先封装页面片段)在何时执行并且动态输出结果可以被捕获<jc:cache>标签使得JSP容器(例如Tomcat)只生成内容作为应用范围内JSP变量来存储每个缓存Cache片段每次JSP页面被执行时自定义标签将缓存Cache页面片段载入而无需再次执行JSP代码来生成输出结果作为Jakarta工程个部分标签库开发使用了这项技术当被缓存Cache内容无需被每个用户或者请求所定制时候它工作十分良好

        这篇文章对上面描述技术做了改进通过使用JSP 2.0表达式语言(EL)允许JSP页面为每个请求和用户定制缓存Cache内容缓存Cache页面片段可以包含未被JSP容器赋值JSP表达式在每次页面被执行时由自定义标签来确定这些表达式因此动态内容建立被最优化但是缓存Cache片段可以含有部分由每个请求使用本机JSP表达式语言产生内容通过JSP 2.0 EL API帮助Java开发者可以用表达式语言来使的成为可能

        内容缓存CacheVS数据缓存Cache

        内容缓存Cache不是唯选择例如 从数据库中提取数据同样可以被缓存Cache事实上由于存储信息中不包含HTML markup以及要求较少内存数据缓存Cache可能更加高效率然而在很多情况下内存缓存Cache更容易实现假设在某个案例总个应用由大量事务对象占用重要CPU资源产生复杂数据并且用JSP页面来呈现这些数据工作切良好直到某天突然地服务器负载增加需要个紧急解决方案这时在事务对象和呈现表达层的间建立个缓存Cache层个非常不错和有效方案但是必须非常快速和流畅地修改缓存Cache动态内容JSP页面相对于简单JSP页面编辑应用业务逻辑变化通常要求更多工作量和测试;另外如果个页面从多个复合源聚合信息时Web层仅有少量改变问题在于当缓存Cache信息变得失去时效时缓存Cache空间需要被释放而事务对象应该知道何时发生这种情况然而选择实现内容缓存Cache还是数据缓存Cache或者其他优化技术有很多不得不考虑原因有时是所开发所特殊要求    

         数据缓存Cache和内容缓存Cache没有必要互相排斥它们可以起使用例如在数据库驱动应用中;从数据库中提取出来数据和呈现该数据HTML分别被缓存Cache起来这和使用JSP实时生成模板有些相似这篇文章中讨论基于EL API技术介绍说明如何使用JSP EL来将数据载入到呈现模板中

        使用JSP变量缓存Cache动态内容

        每当实现个缓存Cache机制是都需要个存储缓存Cache对象思路方法在这篇文章中涉及是String类型对象 种选择是使用个对象——缓存Cache框架结构或者使用Java maps来实现自定义缓存Cache方案JSP已经拥有了称为“scoped attributes”或“JSP variables”来提供ID——object映射这正是缓存Cache机制所需要对于使用page或者request scope这是没有意义而在应用范围内这是个很好存储缓存Cache内容位置 它被所有用户和页面共享当每个用户需要单独缓存Cache时Session scope也可以被使用但这不是很有效率JSTL标签库可以被是和那个来缓存Cache内容通过使用JSP变量正如下例所示:

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c: test="${empty cachedFragment}">   <c: var="cachedFragment" scope="application">   ...   </c:></c:

        缓存Cache页面片段用下列语句输出结果: 
${applicationScope.cachedFragment}

           当缓存Cache片段需要被每个请求所定制时候到底发生了什么?


="xspace-totlerecord">9="xspace-totlepages">1/9="xspace-current">123456789>
Tags:  jsp删除缓存中 p42.0二级缓存 jsp页面缓存 jsp缓存

延伸阅读

最新评论

发表评论