JSP自定义标记库与JSP2标记文件

Vin*_*tti 7 jsp jsp-tags

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

他们只是以不同的方式做同样的事情吗?

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

mac*_*ost 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文件中)然后"返回EVAL_BODY_INCLUDE;" 来自你的"doStartTag".如果这样做,所有JSP指令都将被解析,就像它们是页面的正常部分一样,并且您的标记只是用适当的内容包装它们.

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

但是如果您想在标记内部使用JSP内容,那么您唯一的选择就是标记库标记.希望有一天,JSP人员会发布一种在标记文件标记内部进行JSP指令处理的方法,然后我们真的可以放弃旧的基于类的标记,但在此之前请不要尝试用标记文件做所有标记因为你很快就会被简化为为每一个逻辑片段制作自定义标签(因为这是在不使用JSP指令的情况下进行逻辑的唯一方法).


Vin*_*tti 6

开发自定义标签的问题

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

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

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

必须在专注于标记语言的自定义标记中编写复杂的Java代码.

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

解决方案 JSP 2.0标记文件

  • 标记文件是JSP 2.0引入的重要新概念之一.
  • 标记文件可以更轻松,更快速地开发自定义标记.
  • 标记文件是使用普通的JSP语法开发的,包括脚本元素,并且像任何其他自定义标记一样使用.
  • 每个自定义标记都是单独的标记文件.

标签文件有何不同之处?

使用JSP语法编写.

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

.tag.tagx后缀标识.

旨在为自定义标记开发人员提供易于开发而不会丢失功能.

  • JSTL的主要开发人员之一评论说她有时间,她会使用标签文件重写所有JSTL.