您的位置  > 互联网

技术的最初设计目标(清单4中的jsp代码片段)

﹤%@="com.ibm.."%﹥

﹤%@="com.ibm.."%﹥

﹤%@="com.ibm..Actor"%﹥

﹤%@="java.util."%﹥

﹤%@="java.util."%﹥

﹤%

=().("")

=.()

%﹥

﹤html﹥

﹤头部﹥

﹤标题﹥

﹤%=.()%﹥

﹤/标题﹥

﹤/头﹥

﹤身体﹥

﹤=""﹥:﹤/H2﹥

﹤﹥

﹤="85%"﹥

﹤=“50%”=“3”=“3”=“1”

="#"﹥

﹤%

for(=.();i.()){

=(演员)i.next();

%﹥

﹤="#"﹥

﹤="50%"对齐=""﹥

﹤%=演员.()%﹥

﹤/TH﹥

﹤="50%"对齐=""﹥

﹤%=演员.()%﹥

﹤/TH﹥

﹤/TR﹥

﹤%

%﹥

﹤/表﹥

﹤/﹥

﹤/身体﹥

﹤/HTML﹥

注意,到目前为止,我只介绍了JSP技术最初的设计目标; 在下一节介绍JSP技术的问题之后,我将对这个目标做出自己的判断。 然而,您可能已经开始感到有点好奇,因为将代码嵌入到 JSP 页面中似乎与 JSP 技术的主要目标(分离内容和表示)相冲突。 事实上,我还没有讨论过这个问题。

设计师和开发商

JSP 技术的最终(也是值得称赞的)目标是它试图在应用程序开发过程中创建明确定义的角色。 通过表面上分离内容和表示,JSP 技术可以更清楚地区分设计人员和开发人员的角色。 设计人员使用标准 HTML、WML 或其他合适的语言创建标记,而开发人员编写代码。 当然,如今许多设计师都在学习语言,因此这些设计师开始学习 JSP 编码也就不足为奇了。 通常,设计人员不会简单地创建纯粹的标记;而是创建纯标记。 他们编写一个完整的 JSP 页面并将其交给开发人员。 然后,经过频繁的修改,开发人员使用JSP页面作为完整应用程序的前端。 然而,这里的关键问题是,仍然有许多设计人员没有学习JSP编码,他们必须能够在这种环境下工作。

出现的问题

我刚才介绍了一个好的表示技术应该提供的功能,以及JSP技术试图解决的具体问题。 现在,我开始谈正事:JSP 技术虽然基于良好的想法,但也存在一些问题。 在选择 JSP 来编写应用程序之前(您可能仍然这样做),您应该至少意识到一些陷阱。

您还需要了解 J2EE 编程平台经常被忽视的方面:平台附带 API 并不意味着您必须使用它。 尽管这个想法很荒谬,但许多使用 JSP、EJB 或 JMS API 的开发人员认为,如果他们不使用这些 API,他们的应用程序就不是真正的“J2EE 应用程序”。 事实上,该平台提供的 API 远多于大多数应用程序的需要。 如果您不会使用或对 JSP 技术持怀疑态度,请不要使用它! 在选择 JSP 编写应用程序之前,请仔细研究其优点和缺点。 让我们看看一些缺点。

可移植性和语言锁定

jsp 技术将您锁定在特定的语言中。 这一点不宜过多关注。 至少在我看来,java技术是企业应用的唯一选择。 在这个领域,根本不存在独立于语言的解决方案。 当然,这个时候我并没有涉及到平台。 只有时间才能证明这个平台是否能够真正独立于语言(我非常怀疑)。

然而,选择 JSP 技术将迫使您使用 Java 语言,至少对于内容和表示而言。 虽然 CORBA 可用于业务逻辑,但 JSP 编码需要熟悉核心 Java 语言。 由于许多开发人员通过 J2EE 平台接触 JSP 编码,因此这通常不是问题。

混合型和独立型

在整篇文章中,我一直在研究分离内容和表示的概念。 你可能对此不耐烦,那么现在让我们看看JSP是否可以实现这个目标。 正如我们之前讨论的,JSP声称一直致力于内容和表示的分离,因此我们可以假设它实现了它的目标,对吗? 不一定如此。

内容和呈现之间的界限变得模糊

JSP 允许将 Java 代码插入到标记语言页面中,这是一个非常危险的功能,它允许将内容混合到演示文稿中。 更糟糕的是,业务逻辑经常进入 JSP 页面,如清单 5 所示。

﹤%@="com.ibm.."%﹥

﹤%@="com.ibm.."%﹥

﹤%@="com.ibm.logic."%﹥

﹤%@="com.ibm..Actor"%﹥

﹤%@="java.util."%﹥

﹤%@="java.util."%﹥

﹤%

=().("")

%﹥

﹤html﹥

﹤头部﹥

﹤标题﹥

﹤%=.()%﹥

﹤/标题﹥

﹤/头﹥

﹤身体﹥

﹤=""﹥:﹤/H2﹥

﹤﹥

﹤="85%"﹥

﹤=“50%”=“3”=“3”=“1”

="#"﹥

﹤%

//',ntly(!)

=.()

如果(。()。(””)){

=.(.());

}别的{

=.();

for(=.();i.()){

=(演员)i.next();

%﹥

﹤="#"﹥

﹤="50%"对齐=""﹥

﹤%=演员.()%﹥

﹤/TH﹥

﹤="50%"对齐=""﹥

﹤%=演员.()%﹥

﹤/TH﹥

﹤/TR﹥

﹤%

%﹥

﹤/表﹥

﹤/﹥

﹤/身体﹥

﹤/HTML﹥

JSP 拥护者会很快告诉您,JSP 标记库可以帮助您避免这个问题。 标签库允许将自定义标签(例如﹤/﹥)添加到JSP 页面中,然后在运行时将其解析为标签库中的代码片段。

使用自定义标签和关联的标签库可以将上面的示例转换为清单 6 中所示的内容。

﹤﹥

﹤=“50%”=“3”=“3”=“1”

="#"﹥

﹤/﹥

﹤/表﹥

﹤/﹥

在运行时,执行标记的代码并将正确的结果插入到页面中。 但这并没有解决问题。 对JSP技术的反对不是内容和表示是否可以分离,而是它们是否必须分离。 只要 JSP 编码允许内联编码,就可以很容易地对内联代码进行最后一刻的更改(特别是在临近截止日期时),而不是将代码转换为标记库。 如果这不是真的,那么为什么 Java 语言立即比 C 和 C++ 更受欢迎:Java 禁用了 C 的许多有问题的功能,例如指针加法。 虽然您总是可以强调不需要在 C 中执行指针加法,或者优秀的程序员会插入代码,但我们都知道实际发生的情况。 Java语言是一个更好的选择,因为它严格禁止这些坏习惯。 但 JSP 在这方面与 C 更相似,允许实现一些非常糟糕的做法。

检验JSP技术是否成功实现其既定目标的另一种方法是看它在实践中能否实现该目标; 显然,认为 JSP 实际上无法实现其目标是不公平的。 大多数模板引擎(例如 和 )提供相同的内联编码功能,通常包含类似 Perl 的语言。 然而,XMLC 等技术不允许这种类型的编码。 相反,这些技术采用纯标记语言页面作为输入,然后生成 Java 方法。 这实际上改变了编程流程; 与 JSP 技术一样,应用程序使用方法来影响页面的值 (),而不是使用页面从应用程序调用逻辑。 例如,使用 XMLC 将页面转换为 DOM 树,然后使用 DOM 的 html 绑定来更新页面中的“字段”(有关 XMLC 的更多信息,请参阅 参考资料)。

这里的要点是,JSP 技术比 XMLC 更有能力实现其目标,例如,只需允许标记库即可。 但Sun规范的总体趋势是始终保持向后兼容性,或者至少在很长一段时间内保持向后兼容性。 JSP 规范的当前版本是 1.1,这允许它,因此未来几年 JSP 页面将支持该功能。 在我们深入研究 JSP 编码之前,请注意,它强调的内容和表示完全分离的想法与其实际实现之间存在很大差距,它充其量只是假装将用户界面与驱动代码分离应用程序。

单处理和多任务处理

如前所述,理想情况下,设计人员应该能够执行单独的会话并仅专注于图形设计,而开发人员应该能够专注于编程。 因此,设计人员可以在将页面转换为适合应用程序的格式后对其进行处理。 对于 JSP 页面,将页面转换为适合应用程序的格式只需指向页面导入、插入内联编码以及添加自定义标记库。 问题在于,一些设计人员使用 HTML 编辑器(例如 、 或 ),它们无法识别代码或标签库,这意味着设计人员实际上只收到页面的一部分。 想象一下标签库或代码片段仅生成表格的几行或页面上的其他格式详细信息。 这是多么麻烦啊。 设计者使用了不兼容的 HTML 编辑器,无法看到这些元素的外观。 开发人员完成编码后,设计人员无法轻易对页面进行更改。 此时,不仅没有明确的角色划分,JSP 编码实际上将两种角色合而为一:开发人员必须执行多个任务,并且必须充当开发人员、设计人员和其他角色。

例如,如果您仍然有疑问,请下载 j2EE 并将其中包含的 JSP 页面之一加载到 HTML 编辑器中。 该页面将立即充满一些黄色区域,告诉您页面中包含的任何“错误”标签。 当然,黄色内容来自JSP标签和代码,而不是页面上的任何实际错误。

到目前为止,还没有支持JSP功能的编辑器,也没有听说过任何与之相关的项目。 尽管模板引擎也遇到同样的问题,但许多基于 Java 的解决方案(例如我最喜欢的解决方案)允许您提供标记页面作为演示技术的输入。 在这种情况下,设计者可以根据需要经常修改和重新提供标记页面。 运行表示技术的引擎或编译器将标记页面转换为适当的格式并且不需要任何代码修改(通常)。 最终结果是期望的结果:设计师和开发人员各司其职。

因此,请注意 JSP 技术的承诺和实际交付的内容。 实际上,为了在 JSP 技术驱动的环境中发挥作用,您必须让开发人员处理大部分标记,或者至少让设计人员学习一些 JSP 编码。

HTML 和 XML

JSP 技术最严重的缺陷之一(也是经常被忽视的缺陷)是它与 XML 不兼容。 更准确地说,特别是在 HTML 领域,JSP 页面不需要兼容 XHTML。 XHTML 是万维网 (W3C) 规范,目前正在取代 HTML 4.0。 XHTML 定义了一组 HTML 标签,用于实现格式良好的 XML 文档。 例如,必须转换标记以确保 XML 兼容性(如果这个示例没有说明清楚,请查看参考资料中列出的 XML 规范以及有关 XHTML 的文章)。 相同的规则适用于图像标签,并且在 XHTML 1.1(即将推出)中,大多数字体属性和其他样式都移至 CSS 样式表中。 此外,大多数标准 HTML 文档都可以轻松转换为 XHTML 1.0,这意味着它们可以使用任何 XML 兼容的解析器来读取,并且可以作为 XML 进行处理。

你问“这有什么关系?”。 答案是很多。 因为 XML 正在迅速成为应用程序之间和应用程序内部通信的全球标准。 使用 XML 格式交付书籍使任何使用基本 XML 数据绑定功能的应用程序都可以轻松地使用应用程序的数据。 想象一下,通过将数据迁移为 XML 格式,能够与信用卡公司进行在线交易! 在大多数情况下,您的数据表示还需要与其他公司进行交互。 最常见的情况是门户应用程序,它接受来自各种提供商的内容(例如,天气信息、股票报价和新闻),通常附有提供商的标记。 然而,JSP 页面在这种环境中不能很好地工作,因为它们混合了代码和自定义标记库。

JSP 页面很少有格式良好的 XML 文档,也不注重与 XHTML 的一致性,XHTML 是一种不允许使用各种 JSP 自定义标记库的标记语言。 然而,更重要的是,插入到 JSP 页面中的代码片段不属于任何形式的标记,因此当另一个应用程序处理它们时,将会发生解析器加载错误。

在提问之前,我们先了解一下整个情况。 如果应用程序允许初始客户端处理 JSP 页面,则结果将是纯 HTML(或 WML、VoXML 等)。 然而,大多数请求此数据的应用程序都使用某种程度的缓存,因为网络往返的成本很高。 在这些情况下,缓存的页面将返回陈旧的数据。 因此,您可能更愿意返回 XML 兼容的结果,最好是静态形式。 JSP技术在这些情况下无能为力; JSP 页面必须始终在运行时进行处理,以删除 JSP 代码和标记库。

看看最关键的测试:其他一些表示技术可以做到这一点吗? 答案是肯定的。 该领域最权威的领导者是该项目,它完全基于XML和XSLT样式表应用程序(可以在运行时或静态状态下应用)。 由于 XML 页面(在框架中称为 XSP)实际上是 XML 文档,因此它们始终是 XML 兼容的。 Tea 和 XMLC 等允许输入纯标记语言页面的技术也可以做到这一点,尽管这不是它们的目的。 在这些情况下,用户可以使用 XHTML 或标准 HTML。 此外,这比 JSP 技术更好,因为 JSP 无法静态实现格式良好的 XML。

结论

我希望我的努力能让您进一步了解 JSP 技术的优点和缺点,并且您可以考虑将 JSP 技术作为许多其他表示技术的替代方案。 现在,您可能还对整个 J2EE 编程模型有些怀疑。 如果您希望进一步探索平台选项,您可以在 、 和各种模板引擎中寻找 JSP 技术的替代方案。

最后,请记住,本文并不是建议您使用 JSP 或避免使用它,尽管看起来可能是这样。 我的目的是鼓励您对任何技术进行详细分析,以确保它是正确的选择。 就像编程模型一样,有时它们是合适的,有时则不合适。 进行一些比较,找到最适合您的技术,并做出明智的决定,而不是仓促做出决定。