首页 > 解决方案 > 创建 JSP 标签而不创建新的 .tag 文件

问题描述

我想创建一个可在单个.jsp文件中多次使用的 JSP 标记。我不想创建单独的.tag文件,而是将此标签放在同一个.jsp文件中。这可能吗?

标签: javajsp

解决方案


AFAIK 答案是否定的,因为根据自定义标签文档,为了在 JSP 中创建和使用自定义标签,我们应该拥有有效的标签库描述符文件,以便定义自定义标签和标签处理程序类,以便定义当我们在 JSP 文件中使用自定义标签时应该执行的操作。

引入自定义标签是为了消除 JSP 内部对 scriptlet 标签的需求,将业务逻辑与 JSP 分离,使其真正易于维护并最终可重用。自定义标签是一种很好的方法,可以以一种易于 Web 作者使用和控制的方式从 Web 页面的表示中抽象出业务逻辑的复杂性。

此外,渲染自定义标签还有一个更重要的条件:标签库描述符。标记库描述符是一个 XML 文档,其中包含有关整个库的信息以及有关库中包含的每个标记的信息。TLD 被 Web 容器用于验证标签,也被 JSP 页面开发工具使用。

标签库描述符文件的扩展名必须为.tld,并且必须打包在WAR文件的/WEB-INF/目录或子目录中,或者打包在JAR中的标签库的/META-INF/目录或子目录中。仅当文件为 tld 格式并且打包为 WEB-INF 目录的一部分时,容器才会将文件作为标记描述符 fil。如果一个标签被实现为一个标签文件并且被打包在/WEB-INF/tags/或者一个子目录下,一个TLD会被web容器自动生成。

但是还有另一种小方法可以避免将标记库定义为应用程序的一部分,您可以在 JSP 中定义标记库并使用它,而无需将标记库作为应用程序的一部分。例如,假设有一个名为“www.example.com”的网站,并且他们托管了一个 customlib 作为应用程序的一部分。在这种情况下,您可以直接在 JSP 中使用自定义库。下面是一个可以演示相同的小 Snipper。

<%@ taglib uri = "http://www.example.com/custlib" prefix = "mytag" %>

<html>
   <body>
      <mytag:hello/>
   </body>
</html>

这是一个等效的jsp指令:

<jsp:directive.taglib uri = "http://www.example.com/custlib" prefix = "mytag" />

参考资料和来源:

https://docs.oracle.com/javaee/5/tutorial/doc/bnamu.html

https://www.studytonight.com/jsp/creating-a-custom-tag.php

https://www.tutorialspoint.com/jsp/taglib_directive.htm


推荐阅读