任何人都可以解释 JSP 自定义标签库和 JSP 2 标签文件背后的想法吗?
它们只是做同一件事的不同方法吗?
他们如何比较?它们的优点和缺点是什么,哪个更好?
我 <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 指令的情况下执行逻辑的唯一方法)。
开发自定义标签的问题
传统的自定义标签需要 Java 编程技能。
除了最简单的自定义标签之外,所有的标签都不容易编写。
与 servlet 相比,JSP 的目的是使用标记语言来管理嵌入动态内容的布局。
必须在专注于标记语言的自定义标签中编写复杂的 Java 代码正在倒退。
在实现新的自定义标记时,我们可能希望使用 JSP 表达式语言或其他自定义标记。
解决方案 JSP 2.0 标记文件
标签文件有何不同?
使用 JSP 语法编写。
由.tag或.tagx后缀标识。
旨在为自定义标签开发人员提供方便的开发,而不会丢失功能。