JSP技术优缺点深入分析[6]
JSP 的拥护者会很快告诉您 JSP 标记库 可以帮助您避免这个问题 标记库允许将自定义标记(例如 ﹤AUTHORS /﹥)添加到 JSP 页面 然后在运行时在标记库内将其解析为代码片段
使用自定义标记和相关的标记库允许把以上示例转换为清单 所示的内容
﹤CENTER﹥﹤TABLE width= % CELLPADDING= CELLSPACING= border= BGCOLOR= #FFFFCC ﹥ ﹤ACTORS /﹥﹤/TABLE﹥﹤/CENTER﹥在运行时 将执行标记的代码并把正确的结果插入到页面中 但是这并没有解决问题 反对 JSP 技术的理由并不在于能否 分离内容和表示 而是在于是否必须 分离 只要 JSP 编码允许内联编码 那么就可以很方便地对内联代码进行最后的修改(特别是逼近最后期限时) 而不是将代码转换为一个标记库 如果这不是真的 那么 Java 语言为何会马上比 C 和 C++ 更流行 Java 禁用了 C 中大量有问题的特性 例如指针相加 虽然您可以总是强调您不需要 在 C 中执行指针相加 或者优秀的程序员将插入代码 scriptlet 我们都知道实际会发生什么 Java 语言是一种更好的选择 因为它严禁 使用这些不好的习惯 但是 JSP 在这方面更类似于 C 允许实现一些非常糟糕的实践
检验 JSP 技术是否成功达到其所述目标的另一种方法是看它能否在实践中实现这个目标 显然 如果认为 JSP 无法实际实现目标 这是不公平的 大多数模板引擎 比如 FreeMarker 和 WebMacro 都提供了相同的内联编码功能 通常附带了一种类似 Perl 的语言 然而 诸如 Enhydra 的 XMLC 这样的技术不 允许进行这种类型的编码 相反 这些技术将一个纯标记语言页面作为输入 然后生成 Java 方法 这实际上改变了编程流程 应用程序并不像 JSP 技术那样使用页面从应用程序调用逻辑 而是使用方法影响页面的值(Enhydra) 以 Enhydra 为例 使用 XMLC 将页面转换为一个 DOM 树 然后使用 DOM 的 HTML 绑定更新页面中的 字段 (有关 Enhydra XMLC 的更多信息 请查阅 参考资料)
这里的重点是 JSP 技术实现目标的能力远远超过 XMLC 例如 仅仅是允许标记库这一项就比 XMLC 强很多 但是 Sun 规范总体趋向于始终维护向后兼容性 或至少在相当长的一段时间内维护向后兼容性 JSP 规范的当前版本为 它允许使用 scriptlets 因此在未来几年内 JSP 页面内都会支持这个特性 在深入探究 JSP 编码之前 请注意 在其强调的完全分离内容和表示的理念和实际实现之间存在一个很大的缺口 它充其量只是假装分离了用户界面和驱动应用程序的代码
单处理和多任务处理
如前所述 理想状态下 设计师应该能够执行单独处理 只关注图形设计 而开发人员应该能够将注意力集中在编程上 因此 设计师可以在将页面转换为适合应用程序的格式后 再对其进行处理 对于 JSP 页面来说 将页面转换为适合应用程序的格式就是指向页面导入 JavaBeans 插入内联编码并添加自定义标记库 问题是有些设计师使用的是 HTML 编辑器 比如 HoTMetaL Macromedia Dreamweaver 或 FrontPage 这些编辑器无法识别代码 scriptlets 或标记库 这意味着设计师实际上只收到了页面的一部分 想象一下 标记库或代码片段只生成了表的若干行 或是页面中其他格式化的细节 这是多么麻烦的事情 设计师使用了不兼容的 HTML 编辑器 无法看到这些元素的外观 在开发人员完成编码后 设计师不能轻松地对页面进行修改 这时 不仅没有清晰地划分角色 JSP 编码实际上将这两种角色合二为一 开发人员必须执行多个任务 必须担当开发人员 设计师以及其他角色
如果您仍然对此表示怀疑 那么请下载 J EE Reference Implementation 并将其中一个附带的 JSP 页面加载到一个 WYSIWYG HTML 编辑器 例如 Dreamweaver 页面立即被一些黄 *** 域填充 告诉您页面中包含的所有 错误 标记 当然 黄色内容来自于 JSP 标记和代码 而不是页面出现了什么真正的错误
迄今为止 尚未出现支持 JSP 功能的 WYSIWYG 编辑器 我也没有听说过任何与此相关的项目 尽管模板引擎也具有相同的问题 但是很多基于 Java 的解决方案 例如我最喜欢的 Enhydra 都允许您将标记页面作为输入提供给表示技术 在这种情况下 设计师可以根据需要频繁地进行修改 并重新提供标记页面 运行表示技术的引擎或编译程序将标记页面转换为适当的格式 并且不需要修改任何代码(典型情况下) 最终获得了理想的结果 设计师和开发人员各司其职
因此 要注意 JSP 技术作出的承诺和它实际交付的实现 在实际中 要在一个 JSP 技术驱动的环境下发挥功效 必须让开发人员处理大部分标记 或至少让设计师学习一些 JSP 编码
HTML 和 XML
2023-02-01 广告