超市店长管理规章制度:jsp:include flush标签的含义

来源:百度文库 编辑:九乡新闻网 时间:2024/07/14 14:36:43

原文:https://www.ibm.com/developerworks/cn/java/j-jsp04293/

JSPinclude 伪指令的不足之处有一个是:它会导致 Web浏览器高速缓存所有页面。在处理诸如页脚、版权声明或一组静态链接之类的静态组件时,这是有意义的。这些文件不会改变,因此没有理由让 JSP解释器不断地重新轮询其中的数据。凡是可能的地方,都应该实现高速缓存,因为它改善了应用程序的性能。

JSP 测试和开发

在构建 Web 应用程序或网站时,可能需要大量更新页眉、页脚和导航链接。仅仅为了看到对所包含文件所做的更改,而被迫不断地关闭浏览器或清除其高速缓存,这可能是件痛苦的事情。另一方面,为了结束开发周期,而不得不彻底检查一遍并修改数百个使用了include 伪指令的页面,这也是一件痛苦的事情。我的建议是,在测试期间禁用浏览器高速缓存。在大多数情形下,这样做能够彻底解决问题。也有极少数情形,这样做并不奏效,这时可以在浏览器或服务器上不断地重新启动 Web 容器来确保不进行高速缓存。

但是,有时侯,进行高速缓存会得不偿失。如果提入的内容来自使用动态数据(如 Weblog 或数据库驱动的 JSP文件)的程序,甚至如果所包含的内容是经常变化的 HTML(如时间戳记),那么每当装入 Web页面时,都需要显示这些文件或程序的最新版本。遗憾的是,JSPinclude 伪指令并不具备这一功能。在测试和开发周期(请参阅侧栏“JSP 测试和开发”)中,在浏览器中禁用高速缓存通常能够解决这一问题。但是,对于实际使用的应用程序而言,性能是任何设计决策过程中的一项重要因素,禁用高速缓存并不是一种可行的长远之计。更好的解决方案是使用jsp:include 标记。 


flush 属性

您可能已注意到jsp:include 代码示例中的flush 属性。顾名思义,flush 指示在读入包含内容之前是否清空任何现有的缓冲区。JSP 1.1 中需要flush 属性,因此,如果代码中不用它,会得到一个错误。但是,在 JSP 1.2 中,flush 属性缺省为 false。由于清空大多数时候不是一个重要的问题,因此,我的建议是:对于 JSP 1.1,将flush 设置为 true;而对于 JSP 1.2 及更高版本,将其设置为关闭。

jsp:include 是如何工作的

如果您有点爱刨根问底,那么可能十分想知道jsp:include 标记的行为为什么与include 伪指令不同。道理其实十分简单:jsp:include 包含的是所包含 URI 的响应,而不是 URI 本身。这意味着:对所指出的 URI 进行解释,因而包含的是生成的响应。如果页面是 HTML,那么将得到一点也没有变化的 HTML。但是,如果是 Perl 脚本、Javaservlet 或者 CGI 程序,那么得到的将是从该程序解释而得的结果。虽然页面通常就是HTML,但实际程序恰好是达到目的的手段。而且,由于每次请求页面的时候都会进行解释,因此从来不会象使用include 伪指令时那样高速缓存结果。虽然这只是很小的变动,但它却导致了您所见到的行为中的全部差异。