JavaServer Pages(JSP)技术是用于开发 Web 应用的优秀体系结构,但它的最重要的实用技术之一 ? 定制标记库(custom tag library)? 却常常未被充分利用。标记库实用技术未被充分利用的主要原因不是技术上的,而是语言上的。标记库生产者和消费者说的不是相同的语言。JSP 专家和顾问 Noel J. Bergman 揭示了问题的本质并提供了一些可行的解决方案。
将底层内容模型与表示分离是件好事,这在 Web 应用开发人员中间得到了普遍的认同。在多数大型开发工程中,程序员负责实现后端,表示则留给一名或多名 Web 页面设计人员去做。这种分工确保了最终产品技术可靠、同时表示良好,但它肯定要求两个小组有效地沟通和合作。考虑到每个小组工作时所依赖的知识基础不同,而且关注的问题也极其不同,这可能是一个挑战。
在引入 JavaServer Pages(JSP)规范的版本 1.1 中的定制标记库之前,必须使用 JSP 脚本元素来在 JSP 页面内提供任意的定制功能性。显式地使用脚本元素违背了模型与表示相分离的原则。显式地使用脚本元素还要求,如果 Web 页面设计人员要做任何“从 JavaBean 组件中检索属性”之外的事情,他就要具有 Java 编程经验。这引起了人们对 JSP 页面内脚本元素的使用的广泛关注,这接着导致了人们进行替代解决方案的开发。
一个经典的解决方案是开发出了模型-视图-控制器(Model-View-Controller)类型的使用模型。在这种使用模型中,应用程序的智能部分放置在 servlet 和 bean 中,JSP 页面只负责检索内容并将它呈现出来。Jakarta Struts 就是这种模型的一个很好的示例。别的开发小组已经创建了诸如 Velocity 内容引擎或 Apache 的 Cocoon 工程这样的替代技术。
虽然这些解决方案各有千秋,但它们通常是非标准的,而且忽视了 JSP 技术的持续发展。我们将在本文着重讨论 JSP 技术中使用最不充分的实用技术之一:定制标记库。我的目标是改变您对定制标记库(更具体地说,是标记设计)的思考方式。我的讨论将从澄清关于 JSP 技术及其某些替代解决方案的一些误解开始,然后再转到中心论题上。
JSP 技术:误解和替代解决方案
关于 JSP 技术的常见误解有很多,其中一些误解通常已经过时,而且还吓走了潜在的用户。表 1 列出了一些最常见的误解。
表 1. JSP:误解