7

任何人都可以解释 JSP 自定义标签库和 JSP 2 标签文件背后的想法吗?

它们只是做同一件事的不同方法吗?

他们如何比较?它们的优点和缺点是什么,哪个更好?

4

2 回答 2

8

我 <3 标记文件,但如果他们真的这么说,JSTL 的主要开发人员正在吸烟。您不能将所有标签库标签重写为标签文件标签,原因有一个非常重要的:标签文件不能:

返回 EVAL_BODY_INCLUDE;

换句话说,标签文件的正文内容只有三个选项:

空:没有内部内容,即。<someTag/>

无脚本:没有 JSP 内部内容,即。<someTag><p>hello world</p></someTag> 可以,但 <someTag><p><%= helloWorld.toString() %></p></someTag> 不行

tagdependent:你可以拥有 JSP 内部内容,但它不会被这样处理;相反,您必须解析/渲染它,但是您认为合适

但是使用旧式标签库标签,您可以拥有:<body-content>JSP</body-content>(在 tld 文件中)然后“return EVAL_BODY_INCLUDE;” 从你的“doStartTag”。如果您这样做,您的所有 JSP 指令都将被解析,就好像它们是您页面的正常部分一样,并且您的标签只是用适当的内容包装它们。

就个人而言,我的经验法则是:尽可能使用标签文件,即。每当您不需要 JSP 指令在标签内工作时,因为它们干净一百万倍,非程序员更容易使用,不需要 tld(好吧,如果您将它们保存在单独的命名空间中您的标签库标签)。

但是,如果您希望标签中包含 JSP 内容,您唯一的选择是标签库标签。希望有一天,JSP 人会发布一种在标签文件标签内做 JSP 指令处理的方法,然后我们真的可以放弃旧的基于类的标签,但在此之前请不要尝试用标签文件做所有标签,因为您很快就会被简化为为每条逻辑创建自定义标记(因为这是在不使用 JSP 指令的情况下执行逻辑的唯一方法)。

于 2008-11-13T19:32:00.350 回答
6

开发自定义标签的问题

传统的自定义标签需要 Java 编程技能。

除了最简单的自定义标签之外,所有的标签都不容易编写。

与 servlet 相比,JSP 的目的是使用标记语言来管理嵌入动态内容的布局。

必须在专注于标记语言的自定义标签中编写复杂的 Java 代码正在倒退。

在实现新的自定义标记时,我们可能希望使用 JSP 表达式语言或其他自定义标记。

解决方案 JSP 2.0 标记文件

  • 标记文件是 JSP 2.0 引入的重要新概念之一。
  • 标签文件允许更容易和更快速地开发自定义标签。
  • 标记文件是使用普通 JSP 语法(包括脚本元素)开发的,并且与任何其他自定义标记一样使用。
  • 每个自定义标签都是一个单独的标签文件。

标签文件有何不同?

使用 JSP 语法编写。

  • 并非所有 JSP 指令都允许在标记文件中使用。
  • 由新的标记文件特定指令、动作和隐式对象支持。

.tag.tagx后缀标识。

旨在为自定义标签开发人员提供方便的开发,而不会丢失功能。

  • JSTL 的一位主要开发人员评论说,如果她有时间,她会使用标记文件重写所有 JSTL。
于 2008-10-28T06:36:30.353 回答