当今 JSP 中的四种抽象机制是 jsp:include 标记、 指令、自定义标记库和自定义标记文件。
jsp:include 插入执行另一个 JSP 页面的结果,所以你可以这样做:
<jsp:include "page_naviagtor.jsp"/>
<table id="results">...</table>
<jsp:include "page_navigator.jsp"/>
类似于 jsp:include,只是它并不实际执行代码,而是简单地将其标记到原始 JSP 源中,并与页面的其余部分一起编译。
自定义标签库为您(几乎)提供了 JSP 标签的全部功能,因此您可以执行以下操作:
<tag:wrap_in_page_nav>
<table id="results"> ... </table>
</tag:wrap_in_page_nav>
但是,这些要求您编写自定义 Java 代码。
最后,坦率地说,对于大多数情况来说,最好的选择是 JSP 2.0 Tag FIle。
标签文件是 jsp:include 和自定义标签之间的交叉。它们让您执行类似于“wrap_in_page_nav”标签的操作,但您实际上使用 JSP 标记创建标签。
因此,在许多情况下,您可以简单地剪下要重构的部分,并将其粘贴到标签文件中,然后简单地使用标签。
page.tag
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
<%@attribute name="startPage" required="true"%>
<%@attribute name="endPage" required="true"%>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<tag:page_nav startPage="${startPage}" endPage="${endPage}"/>
<jsp:doBody/>
<tag:page_nav startPage="${startPage}" endPage="${endPage}"/>
</body>
</html>
page_nav.tag
<%@tag description="put the tag description here" pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
<%@attribute name="startPage" required="true"%>
<%@attribute name="endPage" required="true"%>
<div>${startPage} .. ${endPage}</div>
最后,你的 JSP
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
<tag:page startPage="1" endPage="4">
<table> ... </table>
</tag:page>
每个标签文件都拥有JSP的全部威力,唯一的限制是在使用你自己的自定义标签文件时,你的自定义标签文件标签之间不能包含scriptlet代码(你可以用普通的JSP标签,刚才标记文件标记)。
标记文件是一个非常强大的抽象工具,可在 JSP 中使用。