JSP 最佳实践: 使用 JSP include 机制改进外观

将您的网站内容分成可管理的片段

本文是新的 JSP 最佳实践系列文章的第一部分,它介绍了 JavaServer Pages include 机制。请跟随 Java 编程专家 Brett McLaughlin 学习如何使用 include 将静态的头文件和脚注文件加入您的网站或 Web 应用程序页面中。


欢迎阅读 Java 专区中最新的 最佳实践系列文章。如果您看过先前的系列文章,那么您会知道最佳实践旨在让您快速了解各种 Java 技术的有用方面。这一系列的最佳实践专门讨论 JavaServer Pages(JSP)技术,它是核心 J2EE 技术之一。

简而言之,JSP 技术是在 Java 平台上构建 Web 页面或 Web 应用程序接口的工具。JSP 技术允许我们做如下事情:动态响应请求数据、显示复杂的 XML 和 HTML 以及创建生动有趣、动态驱动的网站。在本系列中,您将学习一些用 JSP 技术构建网站的基础知识。我将为您介绍最常用的 JSP 机制,通过这些机制,您将了解基本的 Web 开发技术,如制作模板、操作动态内容、图像托管、创建实用程序代码库等。

本文是这一系列文章的第一篇,在本文中,我们将集中讨论 JSP include 机制,该机制允许我们“拉”入本地 HTML 页面的内容。我们将首先介绍有关 Web 页面 include 发展的一些背景知识,尤其是框架和服务器端 include 的使用。然后,我将向您演示如何使用 JSP include 机制将统一的头文件和脚注文件添加到 Web 页面或 Web 应用程序屏幕。

JSP 最佳实践系列

本系列文章并不打算完整地介绍 JSP 技术,也不打算作为如何构建特殊类型应用程序的指南。相反,系列文章中的每个部分都集中讨论用 JSP 技术编程的某一个方面,将它分成很小的片段。有关 JSP 技术的更广泛介绍或者对如何将它用于特殊结果的更深入研究,请参阅 参考资料部分。

您将需要什么

本系列文章中的所有最佳实践都基于 JavaServer Pages 技术。要运行任何一种实践,需要在本地机器或测试服务器上设置符合 JSP 的 Web 容器,如 Apache Tomcat。您还需要使用文本编辑器或 IDE 编写 JSP 页面代码。请参阅 参考资料,获取 Tomcat 和与 JSP 兼容的 Web 容器和 IDE 的清单的链接。

更好的外观

为 Web 页面创建一致的设计和布局是确保获得专业化外观的最容易方法之一。您或许看过足够多的网站,知道单个站点中的大部分页面都共用统一的页面头、页面尾以及某种类型的导航栏。在设计良好的站点上,这些元素将在每个页面上呈现相同的布局、内容和功能,而主面板(通常称为 内容窗格)会随着每个视图而变化。

以前,这种布局几乎完全由框架和框架集实现。每段静态内容被放置在一个框架中,而页面的主体内容被放置在中间框架中。框架的麻烦就是不同的浏览器常常会以不同方式显示它们,使它们的外观不一致。使用框架从内部页面链接外部站点则比想像的更加困难。原本是想允许用户在不离开站点的情况下查看外部内容,但结果往往不一致。用户最终看到的是整个站点被挤进小得多的框架中,更糟的是,您的站点最终会嵌套在另一个站点框架中。这种混乱驱使 Web 设计者寻找一种更佳的解决方案。服务器端 include(server-side include,SSI)就是一种。

服务器端 include

不久前,SSI 还是用于创建共享内容的最受欢迎的选项之一。简单的 SSI 伪指令允许您创建包含另一个页面内容(如头和脚注文件)的页面,如清单 1 中所示。

清单 1. 正使用的 SSI

     
      Simple SSI test
     
     
       This content is statically in the main HTML file.
]]>

我们不久将使用该文件来做一个练习。目前,您应该将它另存为 test-ssi.shtml。在大多数设置中,SSI 文件必须以 .shtml 结尾,这让 Web 服务器知道将它们解析为 SSI 伪指令。清单 2 显示了名为 included.html 的包含文件的内容。

清单 2. 包含的内容

当请求 test-ssi.shtml 时,您将看到该文件的内容以及 included.html 的内容。您可以在任何支持 SSI 的 Web 容器(如 Apache Tomcat,请参阅 参考资料)上查看这些文件。

从用户角度看,SSI 与框架相比有重大改进,因为在单个文件和从其它被包含文件引进内容的文件之间没有显而易见的差别。不利方面就是 SSI 需要一种特定的服务器设置,而 Java 开发人员常常无法使用这种设置。另外,SSI 通常要求被包含内容是静态的,尽管在后面的版本中加入了动态内容包含。

对于在网站或 Web 应用程序中包含不同类型的内容来说,SSI 是可行的解决方案,但它们不是 Java 开发人员的最佳选择。这不仅因为 JavaServer Pages 技术是替代 SSI 的全 Java 技术,还因为这两种技术不太容易结合在一起。JSP 页以扩展名 .jsp 结尾,这表示要使 SSI 伪指令起作用,必须更改 SSI 配置以解析 JSP 文件(给每个 JSP 页解析增加开销),或者更改 JSP 配置以将 .shtml 扩展名作为 JSP 页处理(这是一个坏主意)。对于 Java 开发人员来说,JSP 技术是最好的内容管理解决方案,幸运的是,其 include 机制很容易掌握。

JSP include

JSP include 伪指令与其 SSI 对等伪指令极其相似。清单 3 显示了清单 1 所示的 SSI 伪指令的 JSP 对等伪指令。任何支持 JSP 的 Web 容器都将处理该 JSP 页的显示(同样,请参阅 参考资料一节,以获得链接)。应该将该文件另存为 test-include.jsp。

清单 3. JSP include 伪指令


     
      JSP include element test
     
     
      This content is statically in the main JSP file.
<%@ include file="included.html" %> ]]>

include 伪指令使将统一的头文件和脚注文件合并到您的站点变得非常容易。清单 4 显示了具有几个被包含文件的主索引页。

清单 4. 主索引页的 JSP include 伪指令



    newInstance.com
    
    


<%@ include file="header.jsp" %>
<%@ include file="navigation.jsp" %>
<%@ include file="bookshelf.jsp" %>
<%@ include file="/mt-blogs/index.jsp" %>
<%@ include file="footer.jsp" %>


]]>

通过查看代码,您将了解有关如何使用 JSP include 的各种方法。您还应该试验一下该代码,让自己掌握其工作原理。

添加动态内容

除了如头、脚注和导航文件之类的静态内容外,清单 4 还包括对 Weblog( /mt-blogs/index.jsp )的调用,这涉及动态内容的主题。如同 SSI include 伪指令那样,当 JSP include 机制应用于动态内容时会出现问题。可以通过使用 JSP include 伪指令来引入动态内容,但将无法获得对该内容的更改。这是因为 Web 容器将被包含文件作为原始(包含)页面的一部分读取。容器将结果高速缓存为单个文件,而不是多个 JSP 组件。因为 Web 容器不会针对更改去轮询被包含文件,所以它不会知道有任何更改发生,它将自动显示高速缓存的页面而不是刷新的页面。要了解它的工作原理,我们将做一个简单的练习。首先,将已保存的 included.html 页面更新为清单 5 中所示的那样。

清单 5. 修改包含的内容

Some new content...
]]>

接下来,保存这些更改,导航至 test-include.jsp 文件,刷新浏览器。您将注意到浏览器中 没有显示 included.html 中的新内容。被包含文件的内容在更改发生之前就被高速缓存了,所以它不会显示出来。如果您的站点包含动态内容或可能被频繁修改的内容,那么这会是一个问题。幸运的是,有一个变通方法。在下一个部分中,我将向您演示如何使用 标记将动态内容加入 Web 页面。在此之前,请参考 参考资料一节并试验这里提供的代码,我将在网上与您再见。

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
  • 要完成本系列文章中的练习,将需要与 JSP 兼容的 Web 容器,如 Apache Tomcat。
  • 您可能还想要研究如何使用符合 JSP 的 IDE。您可以从下面几个 IDE 中选择:
    • JUnit
    • NetBeans
    • Eclipse
  • 有关 JSP 技术的基本详细信息,最好的办法是 阅读 JSP 规范。
  • 有关 JSP 技术的指导性介绍,请尝试阅读教程“ JSP 技术入门”( developerWorks,2001 年 8 月)。
  • developerWorks 也提供了许多有关 JSP 及其相关技术的有一定深度的文章,包括下列文章:
    • 摘自 Professional JSP(2001 年 2 月)的“ JSP architecture”是有关 JavaServer Pages 技术的极佳初级读本。
    • “ JSP 标记库:着意设计的更好的可用性”(2001 年 12 月)研究了 JSP 定制标记库工具,该工具允许您开发自己的用于描述 Web 页面组件的标记。
    • “ 利用 JSP 代码管理您的图像”(2002 年 11 月)讨论了许多本部分 JSP 最佳实践中提供的概念 ― 但集中讨论基于图像的内容。
    • Mark Kolb 撰写的 JavaServer Pages Standard Tag Library 系列文章(共四部分)为本系列文章所包含的最佳实践提供了一些后端理论。至本次截稿时间,仅发表了三篇文章: JSTL 入门:表达式语言(2003 年 2 月)介绍了 JSTL 和表达式语言(Expression Language); JSTL 入门:探讨 core(2003 年 3 月)通过讨论流控制和 URL 管理更进一步研究核心库;以及 Part 3, Presentation is everything(2003 年 4 月)集中讨论了用于国际化的 fmt 标记的使用。
  • Hans Bergsten 的 JavaServer Pages(O'Reilly & Associates,2002 年)是学习 JSP 技术的不可缺少的参考资料。
  • developerWorks上的“ Ten JSP technology books compared”有点儿过时(2001 年 6 月),但它仍出色地评论了非常有用的 JSP 标题。
  • 如果您喜欢 JSP 最佳实践,也可以参考 developerWorks 上的 EJB best practices系列文章。
  • JSP 技术基于 Java Servlet 技术。通过阅读 Jason Hunter 撰写的 Java Servlet Programming(O'Reilly & Associates,2002 年)学习有关 Servlet 的更多知识。
  • 请参阅 developerWorksJava 技术教程页面 ,从 developerWorks获取免费 Java 技术教程的完整列表。
  • developerWorksJava 技术专区 可以找到数百篇有关 Java 编程各个方面的文章(包括有关 JSP 技术的更多文章)。

你可能感兴趣的:(Java)