电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
JSP:include 用于构建动态网站的简单 JSP 标记-JSP教程,Jsp/Servlet
作者:网友供稿 点击:24
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

本文是 java brett mclaughlin 继第一篇 jsp 最佳实践文章后的后续文章,在文中,作者向您演示了如何扩展 jsp 技术中用于动态内容的包含功能。了解静态 include 伪指令和动态 jsp:include 元素之间的差异,搞清楚如何混合搭配这二者以获取最优性能。

在新的 jsp 最佳实践系列的前一篇文章中,您了解了如何使用 jsp include 伪指令将诸如页眉、页脚和导航组件之类的静态内容包含到 web 页面中。和服务器端包含一样,jsp include 伪指令允许某个页面从另一个页面提取内容或数据。清单 1 重温了 include 伪指令。

清单 1. jsp include 伪指令

<![cdata[

<%@ page language="java" contenttype="text/html" %>

<html>

<head>

      <title>newinstance.com</title>

      <meta http-equiv="content-type"

        content="text/html; charset=iso-8859-1" />

      <link href="/styles/default.css"

        rel="stylesheet" type="text/css" />

</head>

 

<body>

 

<%@ include file="header.jsp" %>

<%@ include file="navigation.jsp" %>

<%@ include file="bookshelf.jsp" %>

<%@ include file="/mt-blogs/index.jsp" %>

<%@ include file="footer.jsp" %>

 

</body>

</html>

]]>

您需要什么
本系列中的所有最佳实践都基于 javaserver pages 技术。要运行其中的任何最佳实践,都需要在您的本地机器或测试服务器上安装符合 jsp 技术的 web 容器。您还需要使用文本编辑器或 ide 来对 jsp 页面编码。

虽然 include 非常适于将静态内容并入 web 页面,但对于动态内容却不尽如人意。我们在前一篇文章中在试图重新装入高速缓存文件时发现了这一问题。与大多数页眉文件及页脚文件不同,动态内容变化频繁,必须时刻更新。我们将首先扼要地重述一下 include 伪指令的局限性,然后我将向您演示如何用 jsp:include 标记来扩展 jsp 的包含能力。

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

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

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

jsp:include 标记
jsp:include 只不过是一个不同于 include 的伪指令而已。 jsp:include 的优点在于:它 总是会检查所含文件中的变化。过一会儿我们将研究这一新标记的工作方式。但首先看一下两种 include 各自的代码,以便能够看到二者之间的异同。

清单 2 显示了一个简单页面,它使用了原始的 jsp include 伪指令。

清单 2. jsp include 伪指令

 

<![cdata[

<%@ page language="java" contenttype="text/html" %>

<html>

     <head>

      <title>jsp include element test</title>

     </head>

     <body>

      this content is statically in the main jsp file.<br />

      <%@ include file="included.html" %>

     </body>

</html>

]]>

清单 3 是同一个页面,只不过这里转成使用 jsp:include 标记。

清单 3. 转成使用 jsp:include

 

<![cdata[

<%@ page language="java" contenttype="text/html" %>

<html>

     <head>

      <title>jsp include element test</title>

     </head>

     <body>

      this content is statically in the main jsp file.<br />

      <jsp:include page="included.html" flush="true" />

     </body>

</html>

]]>

您应该注意这两种代码类型之间的两大区别。首先, jsp:include 元素不使用属于 include 伪指令的 %@ 语法。实际上, jsp 前缀让 jsp 编译器知道:它应该寻找标准 jsp 标记集中的元素。其次,指定要包含的文件的属性从 file 变成了 page 。如果愿意,可以自己测试一下新标记的结果。只需更改上一篇文章(请参阅 参考资料)中 included.html 文件的内容,然后重新装入浏览器页面,就会立即看到新内容。

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 脚本、java servlet 或者 cgi 程序,那么得到的将是从该程序解释而得的结果。虽然页面通常就是 html,但实际程序恰好是达到目的的手段。而且,由于每次请求页面的时候都会进行解释,因此从来不会象使用 include 伪指令时那样高速缓存结果。虽然这只是很小的变动,但它却导致了您所见到的行为中的全部差异。

一种混合搭配的解决方案
include 伪指令在某些网站上有其用武之地。例如,如果站点包含一些(如果有变化,也很少)几乎没有变化的页眉、页脚和导航文件,那么基本的 include 伪指令是这些组件的最佳选项。由于 include 伪指令采用了高速缓存,因此只需放入包含文件一次,其内容就会被高速缓存,其结果会是极大地提高了站点的性能。

然而,对于现在许多 web 应用程序或站点而言,地毯式的高速缓存并不能解决问题。虽然页眉和页脚可能是静态的,但是不可能整个站点都是静态的。例如,从数据库提取导航链接是很常见的,并且许多基于 jsp 技术的站点还从其它站点或应用程序上的动态 jsp 页面提取内容。如果正在处理动态内容,那么需要采用 jsp:include 来处理该内容。

当然,最好的解决方案是经常把这两种方法混合搭配使用,将每种构造用到最恰当的地方。清单 4 是混合搭配包含解决方案的一个示例。

清单 4. 混合搭配解决方案

 

<![cdata[

<%@ page language="java" contenttype="text/html" %>

<html>

<head>

  <title>newinstance.com</title>

  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

  <link href="/styles/default.css" rel="stylesheet" type="text/css" />

</head>

 

<body>

 

<jsp:include page="header.jsp" flush="true">

  <jsp:param name="pagetitle" value="newinstance.com"/>

  <jsp:param name="pageslogan" value=" " />

</jsp:include>

<%@ include file="/navigation.jsp" %>

<jsp:include page="bookshelf.jsp" flush="true" />

 

<jsp:include page="/mt-blogs/index.jsp" flush="true" />

 

<%@ include file="/footer.jsp" %>

</body>

</html>

]]>

上面的代码显示了前一篇文章中的示例索引页面。导航链接和页脚是静态内容,一年最多更改一次。对于这些文件,我使用了 include 伪指令。内容窗格包含 weblog 和“bookshelf”组件,它们是动态生成的。这两个组件需要一直更新,因此对它们,我使用了 jsp:include 标记。 header.jsp 文件有点奇怪。这个组件是从另一个本质上是静态的 jsp 页面提取的。但是,正如您将注意到的那样,它从包含页提取页“标语”,然后将它显示出来。要处理这一共享信息,我们必须向页眉文件传入参数。而要处理那些参数,就必须使用 jsp:include 元素。



文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号