在Web应用程序中开发View层时,您希望尽量不要重复JSP文件中的内容。 JSP spec API允许您通过使用标记库来减少这种重复。 定制JSP标记是用户定义的xml标记元素,您可以将其插入JSP文件以替换为某些动态内容。
这是一个使用自定义JSP标记的简单jsp示例 ,该标记插入服务器时间戳记值:
<%@ taglib prefix="myapp" tagdir="/WEB-INF/myappTags" %>
<!DOCTYPE html>
<html><body><h1>Hello World!</h1><p>Page served on <myapp:serverTime pattern="yyyy-MM-dd HH:mm:ss"/></p></body>
</html>
JSP标记还可以允许您将参数作为标记的属性传递。 在上面的示例中, <myapp:serverTime>
标记使用自定义pattern
属性来控制日期字符串的格式。
JSP标签也可以与子标签或任何HTML内容元素嵌套在一起。 嵌套的JSP标记可以为您提供一种有条件地呈现封闭内容的方法。 由于XML结构的缘故,使用标记来呈现条件内容更为冗长,但它消除了在JSP中使用直接Scriptlet代码的麻烦。
有两种创建自定义JSP标记的方法。 第一种方法是使用纯Java代码实现标签,然后将其注册到XML taglib定义文件中。 我现在将略过此方法,并向您展示另一种更简单的方法。
第二种方法使用类似于JSP页面的“标记文件”来构造标记(请记住,JSP标记只不过是某些内容的占位符!)。 我将向您展示上面示例的第二种方法。 首先在src/main/webapp/WEB-INF/tags/myapp
项目文件夹下创建一个serverTime.tag
文件。
<%@ attribute name="pattern" required="true" %>
<%@ tag import="java.util.Date, java.text.SimpleDateFormat" %>
<%= new SimpleDateFormat(pattern).format(new Date()) %>
标记文件的实现取决于文件命名和位置的简单约定。 请注意, src/main/webapp/WEB-INF/tags
目录是必需的路径。 在此文件夹中,您可以创建要组织标记文件的任何子文件夹。 在我们的例子中,它是myapp
目录。 标记文件可以与您通常创建的任何JSP文件一样,除了标记指令几乎没有什么不同。 您可以查看JSP规范以获取它们的完整列表。 无论您从标签文件中输出什么,它将被插入并替换标签的调用者。 请注意,我如何使用pattern属性参数来允许用户更改日期模式,它可以在Scriptlet Java代码内的标记文件中作为变量使用。
由于您可以像使用JSP一样编写标记文件,因此我再次警告即使在标记文件内部也过度使用Java代码Scriptlet。 如果必须调用Java代码,请尝试将代码包装并用单行调用替换,或使用纯Java代码编写Tag实现; 特别是如果您涉及非常复杂的业务逻辑。 这将使调试和维护代码变得更加容易。
JSP标记提供了一种在Web应用程序中构造View层的强大方法。 它可以帮助您重用代码或内容,并生成特定的响应。
翻译自: https://www.javacodegeeks.com/2015/02/ee-jsp-generating-dynamic-content-with-custom-tag-libraries.html